A file context is a filename together with starting and ending positions.
It's often carried by AST nodes that might have been created from a source
file or by the compiler. That makes it useful to have the notion of
`EmptyFC` as part of the type.
Virtual FCs are FC attached to desugared/generated code. They can help with marking
errors, but we shouldn't attach semantic highlighting metadata to them.
Anything that originates in physical Idris source files is assigned a
`PhysicalIdrSrc modIdent`,
where `modIdent` is the top-level module identifier of that file.
Anything parsed from a package file is decorated with `PhysicalPkgSrc fname`,
where `fname` is path to the package file.