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.

Binary compatibility:

- Keep nested PredefTypeCreator class to avoid backward binary
  incompatible change.
- Keep `var` modifiers on the class parameters of
  SerializedTypeTag for backward binary compatibility.
- Adds filter rules to forward binary compatibility whitelist:
  - `TypeCreator`, `PredefTypeCreator`, and `TreeCreator` must now
    extend from `Serializable`.
  - Must have new class `scala.reflect.api.PredefTypeCreator`
    to avoid problematic outer reference.
Add SerialVersionUID to SerializedTypeTag and SerializedExpr

The reason for adding the SerialVersionUID annotations is to
be able to provide serialization stability throughout the 2.11.x
series. And since type tags (and exprs) have not been serializable
before, this does not break serialization for existing code.
Merge pull request #3817 from phaller/topic/typetags

SI-5919 TypeTags and Exprs should be serializable