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.
Now parsing file on every normal mode cursor move

This is still fast & efficient because if we detect that the buffer hasn't been
changed (by examining b:changedtick), the parse doesn't proceed.

In effect, we now make sure we parse the file after every change to the buffer
as soon as that change happens. This means that compilation error feedback will
now be much, MUCH quicker.
Fixing bizarre compilation error on recent clang