Remove any permanent BoostVM reference

* The ASIO thread would call postVMEvent() after/during VM termination,
  (because some IO action happened such as a read error or close)
  resulting in invalid mutex/memory access.
* Save (env, identifier) instead in ASIO classes.
* It might get stale as the VM might have terminated.
* postVMEvent() now always consider the possibly terminated status of the VM.
* Pass the BoostVM& in the postVMEvent() callback as that is safe.
Remove _monitorsMutex in favor of postVMEvent()

* Much simpler, the caller is always the thread running the VM.
Make it so all functions of BoostVM are called by its VM thread

* _portClosed is now public as it already has all protections in its type.