checkBounds refactoring

Move core logic to TypeOps, only leave error reporting in Checking.
That way, we have the option of re-using the code as a simple test
elsewhere.
Better printing of variant types with wildcard arguments.

We used to approximate these by their bounds, but this is confusing.
See comment in printbounds.scala.