SI-8549 Honour the @SerialVersionUID annotatation

In PR #1673 / 4267444, the annotation `SerialVersionId` was
changed from a `StaticAnnotation` to `ClassFileAnnotation` in
order to avoid silently ignoring non-literal UIDs like:

    @SerialVersionUID(0 - 12345L) class C

And to flag non-constant UIDs:

    @SerialVersionUID("!!!".length)

While this indeed was fold constants, the change was incomplete.
The compiler API for reading the argument from a `ClassFileAnnoation`
is different, on must look for a `LiteralAnnotArg`, rather than a
`Literal`.

This commit:

  - amends the backend accordingly
  - removes relevant duplication between `GenASM` and `GenBCode`
  - tests that the static field is generated accordingly

This will mean that we will break deserialization of objects from
Scalal 2.11.0 that use this annotation.
SI-8549 Enforce serialization stability for selected collections

To date, we've been hesidant to offer any guarantees about
Java serialization of standard library types among heteregenous
Scala versions.

Nonetheless, we have added `SerialVersionUID` annotations to
parts of the standard library, to offer some stability. This
protects against two winds of change: automatic calculation of
this UID might differ between JVM versions, or it might differ
due to otherwise immaterial changes to the library in Scala
releases.

With this commit, we strengthen the guarantees. Classes
marked with `SerialVersionUID` will be serialization compatible
within minor releases of Scala. This is backed up by the
enclosed test.

After major releases, we reserve the right to break this.
But the test will serve to avoid *accidental* changes.

Specifically, the test case checks:

  - deserialize(serialize(x)) == x
  - serialize(x) is stable over time

I have included values of all types marked with `@SerialVersionUID`
in the library. For some types, I've added variations in the
values to exercise different subclasses, such as `Set1` / `Set2`.

This found that that the serialized form of predefined `ClassTags`
included the cached identity hash code and failed the stability
test. This wasn't an issue for correctness as they also provide
`readResolve`, but I marked those fields as `@transient` in any
case to comply with the test expectations.

That whole area is good example of a serialization worst-practice:
using anonymous classes in code like:

    val Object: Manifest[java.lang.Object] = new PhantomManifest[...](...) {
       private def readResolve(): Any = Manifest.AnyVal
    }

... will lead to instability if these declarations are shifted around
in the file. Named classes would be preferred. I've noted this in a
TODO comment for 2.12.
SI-6988 Test case for non-literal / non-constant SerialVersionUID

The `neg` test was already working since `SerialVersionUID`
was changed to a `ClassFileAnnotation`; the `run` test only
started working since the recently preceding commit that
made a compensatory test in the backend.
Merge pull request #3711 from retronym/ticket/8549-2

SI-8549 Serialization: fix regression with @SerialVersionUID / start enforcing backwards compatibility