Implement Java-compatible serialization

The first change in this series is a real bug fix.

The next commits concern a backwards-incompatible change to switch to a (de)serialization that is compatible with Java.

Rationale: I want to run a project with Avian which relies on [Sezpoz](https://github.com/jglick/sezpoz), an annotation processor that analyzes annotations at compile time and saves the result as a serialized ```TreeMap``` in the ```META-INF/annotations/``` name space of the resulting directory/.jar file. This serialization is performed by Java, of course, and it can only be deserialized accordingly.

To make things consistent and testable, I implemented both directions.

The question is whether you would want the ```LegacyObject{In,Out}putStream```s to live in ```avian.*```, whether you would prefer them to die, or whether you would want a switch by which to activate the legacy (de)serialization for use with data serialized by a previous Avian version?