Synthesize constructor for opaque types

Opaque types will always erase to the same type their right hand side erases to, because all type members behave that way and because this is fundamental for some uses like making facade for Scala.js, so it’s not possible to evolve opaque types into something that compiles to future-jvm-value-classes.

But we do have a feature that matches up with JVM value classes pretty well already; it’s the existing Scala value classes! Of course they will have to be tweaked to match whatever the JVM ends up with (at the very least, we’ll be able to remove the restriction that a value class can only contain one field), but fundamentally they will still be classes, and respect the semantics of classes at runtime like existing Scala value classes do.

A case class.