Stream Optimisations

I have added reviewed the stream usage on the library and found a few areas where it could be optimized.

There is still other areas that could be handled more efficiently however so far this is OK.

Used BufferedStream's where ever was sensible to reduce the memory footprint and speed read and write to disc.