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 

@jch agreed. I have some thoughts brewing on this but nothing actionable yet.