read generic args when finding a simple type
"rename" generics at use site

For instance, say you've defined a data type `One[A](value: A)`. But
when I use it in a method declaration (or definition), I use it as e.g.

    wrap[B] (v: B) -> One[B]

So the `B` here is really the same as the `A`.
generic methods
move classes to a new subpackage
move more classes, fix built-in methods