[r=Rocky] Checking of const -> type conversions

Again basically just a huge mess. Getting the errors to match up exactly can be tricky.

One new requirement is to be able to print the ast as the go compiler does, not the ast package. Getting this right is finicky, you can see I've left a lot of TODO's in the Expr.String() implementations.

After this, repl will complain about this like
```
go> int8(1000)
constant 1000 overflows int8
go> 100 / 0
division by zero
go> int(1.5i)
constant 1.5i truncated to integer
constant 1.5i truncated to real
go> 
```

I set the pull request to merge into the wrong branch, so you can see the demo fix commits. After you merge those, they will go away.