Added Fakes for DiskIO

- FakeFsDiskIo uses pyfakefs
- FakeMemoryFsDiskIo uses fs.memoryfs

We will use one of these when running future tests that require disk access.

Also removed some test cases from TestDiskIo. They were corner cases that were causing FakeFsDiskIo to fail. It might be a good idea to report them to the pyfakefs project though.
Moved DiskIo tests into a common class

Previously we were inheriting the unit test which caused the base unit test to be run again.