mindless doubles!
AnyRef => Any in all identity management methods

Otherwise really funny things happen. If we occasionally pass an Any
into a method that requires AnyRef, the argument will then be silently
promoted into AnyRef using PickleOps lolololol
shareEverything, shareNonPrimitives, shareNothing

noRefs => shareNothing
yesRefs => shareEverything

However sharing of primitives (arrays and strings) is not yet implemented.
I will add support for those in subsequent commits.
don't share arrays

Sharing arrays belongs to the same category of impossible as sharing
lists or vectors. It is very time-consuming to find whether these things
are equal, and in case of arrays this is beyond normal hashCode().

Therefore I'm just either leaving this for future work when you guys
figure out what datastructure you're planning to use or forgetting about
this for good.
funfix: syncs pickling and unpickling

There are two unsyncs between pickling and unpickling, which can lead
to situations when pickler writes in one order and unpickler tries to
read in another order.

1) Pickler writes all fields in the order provided by cir.fields.
Unpickler first reads all non-loopy fields, filling in loopy ones with
nulls, and only then it reads the loopy fields.

2) Pickler registers picklees before pickling, whereas unpickler
registers unpicklees after their instantiation (i.e. after all non-loopy
fields are filled in).

1 is an easy fix => just take the pickler and reorder fields according
to loopiness. However when I encountered 2, I thought it's going to be
the bane of string sharing. Luckily, after some pondering I arrived at
a pretty decent workaround. Before unpickling we first preregister
the thing we're unpickling, putting null into unpicklees and advancing
nextUnpicklee, and then after we instantiate an unpicklee, we rewrite
that null with the actual instance. Since we only use non-loopy fields
during instantiation, noone will be able to observe the null, so we're ok.
share strings

This is quite illustrative for an implicit-based solution to sharing
configuration. Looks fun, can't immediately see the downsides if any.

SANITY CHECK: do equal strings always have equal hashcodes?!