Infer existential

This is a commit that I had issues with. The idea was to replace Top types with equivalent types with free variables and then try to infer variables for those types so that it was a subtype of the type being restricted. This would allow vector? on a sequence of Numbers to restrict to a vector of numbers.

The reason this fails is that meet doesn't actually compute the meet of two types, but might instead return Nothing. This then infers that the restriction is stronger than it actually is. I'm not sure if there is a solution, but I'm putting it up for comments/ideas.