Improve cat performance

`cat -n` new:

```
Rust
real	0m0.216s
user	0m0.200s
sys	0m0.013s

C
real	0m0.214s
user	0m0.193s
sys	0m0.020s
```

`cat -n` master:

```
Rust
real	0m2.046s
user	0m2.020s
sys	0m0.027s

C
real	0m0.215s
user	0m0.177s
sys	0m0.033s
```

`cat -t` new:

```
Rust
real	0m1.491s
user	0m1.473s
sys	0m0.020s

C
real	0m0.934s
user	0m0.917s
sys	0m0.017s
```

`cat -t` master:

```
Rust
real	0m3.619s
user	0m3.587s
sys	0m0.033s

C
real	0m0.915s
user	0m0.900s
sys	0m0.013s
```

Input is always a randomly generated 100MB file in a ramdisk and the output is piped to /dev/null.

I've removed Windows specific code in the process but that can probably be added again (some works needs to be done to handle squeeze-blank on windows).

To improve the performance of `cat -t` one could try to manage the buffer manually.