[r=Rocky] Integrate binary checks

Hi Rocky,

I would like to merge this sooner than later. I've rewritten the binary expression tests to take advantage of the type checker and I think there is now reasonable coverage. One issue you are going to have is that identifiers, such as `quit`, are now checked and will raised undefined errors.

Im still not convinced about the need for the EvalIdent callback, in my opinion commands like quit would be better handled by some non-go syntax. for example, ghci uses `:` similar to the way vim works. For example, import is `:m` and `:q` is quit. IMO this is something the REPL loop should look for before attempting the evaluation phase. What are your thoughts on this? Once the merge happens go-fish will break, unless you add a dummy `quit` variable to the environment.

PS. I've just realised I've been hacking away with the vim `expandtab` option set. There is now a dogs breakfast of tabs and spaces throughout the code. I've been meaning to add a precommit hook for a while which runs go fmt. Once this is merged, I think I'll do that.