Handle errors instead of fail!()ing

Dir::readdir and File::from path now both return IoResults, rather than just calling fail! and exiting. This allows the program to continue after an error.
Tidy up unused imports