simplify primitive format

Instead of segment arrays with class_id => object_id => object
hierarchies, rely on ordered hashes and invert the class_id and
object_id levels. So object_id is the top level, the hash item order
implies dependencies, and the last item in the hash is the return value
of load.

Because of recursion, the ids count down and the final object will
usually have id 1.

{ 2 => { "Foo" => 'bar' }, 1 => { "FooBar" => [2, "baz"] }

Creating and linking to other objects in the can is up to the
serializers. The "FooBar" serializer must know that 2 means object 2
instead of Fixnum 2.