File IO abstraction

File IO module to hopefully abstract File IO eventually. I'll add commits individually - may be squelched later

Addresses:
- [x] #246 - Error on run out of space
- [x] #245 - Check before ht writing on --savehash

~~- [ ] #147 - Verify input file existence~~
- [x] #135 - Intelligent message on empty files
- [x] Add support to check for file existence before writing output file

and more!