[r=Rocky] Carl func call check

This should type check function calls. Again it's been fairly rigorously tested against gc and things seem to work in the general case.

What isn't going to work are constant to interface conversions
```
func f(interface{}) {}
f(1)
```

I've also fixed up the failing tests and added the necessary duct tape to the evaluator (not the checker) to get things working again.