SI-5919 TypeTags and Exprs should be serializable

- Make TypeCreator and TreeCreator extend Serializable.
- When replacing a SerializedTypeTag with a TypeTag or WeakTypeTag,
  do not use scala.reflect.runtime.universe.rootMirror, since
  it is unlikely to find user classes; instead, create a runtime
  mirror using the context ClassLoader of the current thread.
  Use the same logic for SerializedExpr.
- Remove writeObject/readObject methods from SerializedTypeTag
  and SerializedExpr since they are unused.
- Add @throws annotation on writeReplace and readResolve methods.
- Handle SecurityException if the current thread cannot access the
  context ClassLoader.
- To make type tags of primitive value classes serializable, make
  PredefTypeCreator a top-level class. Otherwise, it would
  retain a reference to the enclosing Universe,
  rendering the TypeCreator non-serializable.
According to [JLS Chapter 13, section 13.4.4](http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.4), extending from `Serializable` does not break bincompat for pre-existing binaries. (Reason: the total set of superclasses or superinterfaces, respectively, of the class type loses no members.)