Refactor BER encoding/decoding of Integers

Fixes encoding/decoding of Integers to account for negative values.

Also consolidates Fixnum and Bignum encoding (moved into the Integer class) since the same logic works equally well, and we want to encode/decode negative values properly regardless of size.

This PR is targeting #172 which addresses some correctness issues (improperly encoding positive integers, resulting in negative values being decoded in response). I wanted to review this independently.

cc @jch @schaary 

Aside: I'd like to move away from monkey patching core classes in the future. Out of scope for this PR.