Implement cut - implement #165

This pull adds the `cut` command. When complete it should fix issue #165.

Currently it lacks support for the `-f`/`--fields` option. I will work on it in the upcoming days.

The `-c`/`--characters` option uses `rust`'s underlying definition of a character as a utf-8 sequence. This differs with `cut` behaviour for GNU coreutils, which simply implements `-c`/`--characters` as an alias for `-b`/`--bytes`.

Currently the program just `fail`s if it encounters a non-utf-8 sequence. The program should show an error, but seeing as the behaviour does already differ from GNU `cut` any suggesting on the handling of characters as utf-8 sequences are welcome.

I compared the performance between GNU `cut` and this implementation for `--bytes` and it is not as good as I had hoped.
I already switched from a idiomatic approach with iterators to a more C-like implementation, which did double the performance, but it is still an order of magnitude slower than GNU `cut`. Again, any suggestions would very much be appreciated. 
I took the `open()` function from `wc.rs` as is provides a solution for when stdin is specified with "-".

`open()` does return it's Reader implementing object wrapped in a `BufferedReader`, but because it needs to return an object that implements the `Reader` trait and seeing as how `stdin()` returns a `StdReader` and `File::open()` creates a `File` object it is forced (only pointers allow casting as traits) to put it on the heap. 

The only way around this indirection, as far as I can see (and know of in rust) is to branch on the filename right before processing each file. This way the File object and the StdReader object can both be kept on the stack, but this does mean a double implementation of the main loop. Maybe this double implementation could be wrapped in a macro?