Refactoring out TU storage into own class

This makes the code more readable, maintainable and robust since we're now
encapsulating the mutex to filename_to_translation_unit_.
Some minor refactoring of TU store
Ensuring TUs expire when compilation flags change.