Varint fixes

This supercedes #13 

Included are tests for the limits of all numerical data types, and fixes to make sure they're all handled correctly.

New behavior:

The ```int32``` and ```int64``` data types are now handled as signed values, though are not zigzag encoded. This seems to be in line with other library specifications and allows us to handle all edge cases with clearly defined limits on the data types.