Support for encoding/decoding negative int64 values

Adds support for parsing/encoding negative int64 values down to -2^53. It's not the most elegant code : |

Overall, working with a negative varint64 in js feels totally backwards because you don't know the sign of the varint until the very last byte and the bytes prior to it are pushing you past Math.pow(2,53). You basically have to parse twice.

@mafintosh would appreciate your thoughts here and also whether this handling belongs in `protocol-buffers` or should be targeted in an upstream dep.