Redirect and/or gag stdout/stderr.

[![Build Status](https://travis-ci.org/Stebalien/gag-rs.svg?branch=master)](https://travis-ci.org/Stebalien/gag-rs)

Documentation (with examples): https://docs.rs/gag/

# Limitations

* Doesn't work on windows. Patches welcome.
* Won't work if something else has called `std::io::set_print` (currently
  unstable). Unfortunately, this function doesn't actually redirect the stdio
  file descriptor, it just replaces the `std::io::stdout` writer.
* Won't work in rust test cases. The rust test cases use `std::io::set_print` to
  redirect stdout.

# TODO:

* General:
  * Windows support.
  * Better error handling?
* Redirect:
  * Be generic over references. That is, accept both a reference to an AsRawFd or
    an AsRawFd. Unfortunately, I don't know if this is even possible. Borrow
    doesn't work because I really want the following constraint:
    `impl<F> Redirect<F> where F: BorrowMut<T>, T: AsMut<AsRawFd>` so I can write
    `file.borrow_mut().as_mut()` but that would be ambiguous...
* Buffer:
  * Deallocate the buffer as it is read (FALLOC_FL_PUNCH_HOLE) if possible.
