Refactor hierarchy of virtual files to VirtualTextFiles.

The current virtual files are implicitly text files, but
eventually we will need to also represent virtual binary
files. This commit refactors the hierarchy to separate
VirtualTextFile (text) from VirtualFile (agnostic). This
refactoring will allow the later introduction of binary
files as VirtualBinaryFiles.
Merge pull request #509 from sjrd/refactor-virtual-files

Refactor hierarchy of virtual files to VirtualTextFiles.