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.
Add serializer and deserializer of the IR.
Emit serialized IR files instead of .js + .js.map + .sjsinfo.

The ClasspathBuilder automatically expand .sjsir files into their
desugared VirtualScalaJSClassfile version for now. It is left for
a future commit to get rid of VirtualScalaJSClassfile entirely and
have the packager and optimizer to work directly on the IR file.
Remove VirtualScalaJSClassfile and use VirtualScalaJSIRFile instead.

Now the various tasks working with a ScalaJSClasspath extract the
information they need from the IR directly, and work with that.
Remove an indirection in emitting files in the packager.