refactored GenericFileSystemTestCase
FileSystem.filesFrom() throws exception when directory does not exist
added AssertPath with helper methods for asserting paths on FileSystem
reused methods from AssertPath in FileSystem implementations
added IllegalPathForFileError to make FileSystem exceptions more finegrained
added GenericFileSystemTestCase.cannot_open_output_stream_when_path_is_root_directory()
added PathIsAlreadyTakenError and AssertPath.assertPathIsUnused()
added GenericFileSystemTestCase.cannot_create_link_when_path_is_taken_by_file()