[Finishes #80169588] Add exact js-numbers support to Blockly

This change converts the basic 'math_number' and 'math_arithmetic' blocks to use the js-numbers (jsnums) lib.  Any inexact types passed to the 'math_arithmetic' block are converted to exact types before being operated on.

Existing levels "just work" because we override the .valueOf() method on exact types.  Whenever an exact type is compared or operated on by non-exact operators it is automatically coerced to an inexact JavaScript Number.

I added some basic codegen.js fixup to strip out `jsnum.ensureExact(...)` and convert `.add` etc. to `+`.  There are still extra parens being generated -- I'll need to investigate if we go this route.

Before: 0.2 + 0.1 -> 0.30000000000000004

![screen shot 2014-10-10 at 4 52 23 pm](https://cloud.githubusercontent.com/assets/413693/4600645/e02ac156-50d8-11e4-9f39-7de6aeabd5aa.png)

After: 0.2 + 0.1 -> 0.3

![screen shot 2014-10-10 at 1 31 33 pm](https://cloud.githubusercontent.com/assets/413693/4600644/de61bbcc-50d8-11e4-8a26-a19c10dfc65f.png)
I'm open to other approaches, or ways to make the code more readable.  Regex isn't a good approach here because it can't handle arbitrarily deep nesting of statements, see http://stackoverflow.com/a/546457.  At minimum we need a stack to track parenthesis depth and remove the closing parenthesis that corresponds to a removed statement.