Multicore processors support

Hopefully this should be clean code and it is tested by various Oz scripts I still need to organize to form a decent test suite.

What's new:
* Removed any kind of global state which should be per-VM.
* Ability to create multiple VirtualMachine in a BoostEnvironment (was BoostBasedVM).
* A BoostEnvironment is really just an environment now and handles the list of VMs.
* Memory management has been improved so we have `--min-memory` in addition to `--max-memory` and the heap size increases or decreases by a factor of 2 as needed. Changing the heap size is done by setting the new heap size in the properties and triggering a GC (for copying everything to the new heap).
* A VM module in Oz to manage VMs. A description is available at http://eregon.me/ucl/vm_api_doc.pdf (I guess I should add that to the website in HTML?).
* A VM can be started from a `functor` value in Oz code with `Ident={VM.new Functor}`.
* `{Application.exit ExitCode}` only exits the current VM. If a VM crash (for example, because it reached the max memory threshold), only that VM is stopped.
* Clean termination of VMs including releasing the heap.
* Introduction of a VMPort, a special kind of Port to communicate between VMs. One can only send Pickle-able values on it.
* A single IO thread is used for all VMs.
* A single backup memory space ("heap") is used for all VMs so memory usage is lowered. All references to the secondMemoryManager have disappeared and usage of it is only allowed within the `withSecondMemoryManager` context, used only for GC.
* (unrelated) Static linking of GMP so there is no runtime dependency on libgmp.

Linked with issue #163.