Big refactoring of Multi-VM interactions to handle clean termination

* No one has the right to hold a BoostVM& without using the specified API.
* Instead, all functions use VMIdentifier to represent the fact
  the VM might have terminated.
* Real and clean termination is achieved by appropriately calling the destructors.
* No more calls to the dangerous std::exit().
* Proper validation of VMIdentifier by differentiating
  possible valid VMIdentifier from alive VMIdentifier.
* A VM might no more monitor itself (it is useless and dangerous).
* Cancel timers only in the unexpected exception case.
* Proper handling of possible race conditions in sendToVMPort().