Cache the IPv4 start
Added more tests for broken databases
Some cleanup.

The reason the "& 0xFF" were needed in the Java implementation is
that bytes there are signed. C# has an unsigned byte type. Also
some other minor cleanup.
Improve error handling
Decode size directly to int
Removed repeated code in DecodeInteger and made methods internal
Removed more repeated code
Made the Decoder class internal
Don't make a JValue out of the pointer.

Also, don't use longs for pointer offset given that we just convert
them to ints later on (over and over again).
Remove finalizer and check for null MMF when using in-memory mode