Add support for pickling floats

This patch adds support for pickling floats. There are some minor issues in testing (as -0.0 == 0.0 and nan != nan in particular), so I add a special test.

I also separate out the idea of unpicking by calling a method on a string, as 'eval' does not work on floats (and it feel better to me to not use eval in general).