Support unsaved files

Unsaved files represent files which are not yet stored on disk and we
can pass them from memory. This is how clang supports parsing
in-memory buffers.