Fix #412: do not box primitive values (except Chars)

OK, so here comes the big one. The successive removal of boxes for all primitive types except `Char`s.
The individual commit messages explain why the groups were done as they were, and what semantic guarantees are lost in the process.