Fix type-holes

This branch fixes the type-holes to infer types in the proper environment (i.e. not just the top-level...). It lets us use them in conjunction with termination expressions for very nice results (e.g. ByteString.small.hs at the top of the diff).