Rename bootunpickler-decl.hh to bootunpickler.hh

* It is included in mozartcore.hh and has its own .cc.
* There was no bootunpickler.hh but one bootunpickler.cc.
* The interface only needs to be declared at .hh level.
Allow Oz to use the efficient boot unpickler
Implement unpickling of unicodeString in bootunpickler

* Also add an error message when type is unknown.
Fix unpickling of namedname
Fix missing argument in MemManagedList::remove_after()

* Also document usage of remove().
Implement the pickler in C++ for better performance

* More than 60 times faster than the Oz pickler!
* Made available to Oz as the builtin Serializer.pickle.
* Introduces a few core atoms to ensure fast comparison.
* Uses an algorithm close to the one of Serializer.
* Handles resources and read-only variables as the original pickler.
Use the new serializer for inter-VM operations

* Also removes dependency on Pickle so the whole VM module is serializable!
* No need anymore for the 'pickle.pack' property.
* Sending unit on a VMPort is 50 times faster.
Move definition of pickle() to pickler.hh as it is so simple
Deduplicate features in the Pickler

* Move PickleNode to the header since we need it as an argument type.
Move the Pickler topLevelValue to an argument of pickle()
Reorder a few methods of Pickler
Implement deduplication of arities in the Pickler
Use std::nullptr_t instead of our custom-defined type

* other places in the codebase already use it anyway.
Fix a segfault due to what seems a bug in GCC
Add a test for pickling, based on base/pickles.oz
Implement deduplication of builtins in the Pickler
Refactor by extracting methods from the deduplication code
Rename Pickler::writeValue() to writeNode()

* So "value" means node with "value behavior" and we do not mix the meanings
Rename bootunpickler.* to unpickler.* as it is now a full unpickler

* Also matches with pickler.{hh,cc}
Use a type atom to type id record in Pickler

* It is unique per VM (the cost of building it for simple values to pickle
  is significant not to say wasteful of memory).
* We have binary search instead of linear search for n=21,
  so it takes 1-5 (compareByCodePoint) comparisons
  instead of 1-21 (equality of pointers) comparisons.
* We know directly the right type id to write and
  we can share code for consecutive ids.