compiler: Resolve type variables from proc types

This allows procedure types to be used as evidence when resolving
polymorphic variables. For example, (map) now has the following
type:

(All (A) (-> <any> <any> * A) <list> <list> * (Listof A))

"A" will be resolved to the return type of the passed procedure.

Originally this also added support for multiple valued type variables
like *. However, this was significantly complex and with the special
planning of (apply) and (call-with-values) it had limited utility.
stdlib: Fix signature for (call-with-port)

(call-with-port) returns *, not a <port>