Before this commit, finding the implementation for a type class method was done with a simple lookup table. This commit adds a router based on function signature. This also paves the way for adding type constructor arguments in function signatures. And it removes quite a few references to the prelude out of the compiler. Also adds a bunch of helper methods to render signatures as strings.