Refactoring of project data storage

- Projects now have a dedicated ProjectDataStore instance containing all
logic for data storage.
- FileProjectDataStore implements ProjectDataStore. This is used when
using the FileProjectManager. Moved all file access logic to this class
and added a ReadWriteLock for thread-safety.
- Access to the ProjectDataStore goes through the Project. The project
instance is retrieved from the ProjectManager cache to assure
thread-safety. In some cases such as startup, recovery and import where
no project instance exists in cache, new instances of Project are
created for the sole purpose of data access.
- Removed FileHistoryEntryManager and moved logic to HistoryEntryManager
which was converted to a class. The logic is no longer restricted to
file persistance so a general manager implementation is sufficient.
- Updated tests to reflect refactorization.