Make Lucene InMemoryDirectoryFactory survive through database restarts.

o InMemoryDirectoryFactory is a facade for Lucene's RAMDirectory.
o InMemoryDirectoryFactory is used if the database is running atop EphemeralFileSystemAbstraction.
o Ensure that there is only one instance of DirectoryFactory per FileSystemAbstraction.
o Introduce FileSystemAbstraction.ThirdPartyFileSystem to encapsulate DirectoryFactory
  (this abstraction is necessary because FileSystemAbstraction cannot depend on any Lucene classes)
o In tests, the previous behaviour was causing undesirable recovery on indexes after database restart
  (because the underlying files had been stored in a fake file system tied to a previous database instance)