Implement VM Ports via pickling in the heap!

* We allow to get only once the stream on VM.stream to avoid leaks.
* The sending without inter-VM synchronization is accomplished
  by pickling the value, dumping that to a std::vector allocated on the heap
  and adding a task via targetVM.postVMEvent() which unpickles the value
  from the std::vector and binds it in the stream.
* We use a ReflectiveEntity to represent a VM,
  and intercept {Send VM V} to pickle V first.
  (much cleaner than calling Pickle.pack in C++ code)
Rename VM.stream to VM.getStream

* to reflect the fact we can ask for it only once.
rename BoostBasedVM to BoostEnvironment

* Because now it really is just an environment,
  has no VM functionality (except creating them),
  and just runs the IO thread.
* Impact is relatively low for a rename,
  showing usage is mostly access to the BootLoader
  and the io_service.
Add VM.ncores
add ReifiedVM to the ValueEquatable interface