Add ReusableByteArrayInputStream#readByte.

It throws EOF as god intended.
Type#decodeBytes now returns ByteLists instead of taking out buffers.

ByteList is a jruby type that underlies the jruby string type.  It
offers an easy way to wrap sections of existing byte arrays with the
promise of exposing them as strings later.

These seem cheap enough to just construct and return, so long as we
aren't copying bytes (checked the source, it isn't.)
Start Type.encode & .decode for most types.

.encode_to_stream and .decode_from_streams take types directly now to
make recursion easier.
Packs en|decode as either hashes or arrays, hash keys are symbols.

A packed type has ruby hashes for its values iff all the packed types
are also named types.  Otherwise, an array (possibly with singleton
hash entries) is used.
Expose a large set of type checking predicates on Type.
Drop type checks in favor of predicates in java.
Make Booleans .encode and .decode