Fix Dict Bug

This fixes the bug reported here: https://github.com/evancz/Elm/issues/444 . The bug was actually in the old balancing code for insert (it violated the rb invariant), so I switched it to using the more general balancing function that remove uses.

Also removes now dead code and rearchitects a few things to statically
eliminate possible future bugs.

Thanks to @xashili for the random testing code.