Fix the shape of missing dictionary key errors

* Now matches Mozart 1's and produces a nicely formatted error.
Merge pull request #201 from eregon/dictKeyNotFound

Fix the shape of missing dictionary key errors
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