Negative number support

It turns out that the runtime already supports negative numbers, but
it's based on implementation-specific behavior (namely that the bitshift
operator >> in C is implemented as an arithmetic shift).

I added support for negative numbers in the parser, then made sure that
we used an arithmetic shift for converting to a native integer.