A thread storage must be kept alive as long as it lives (or `std::terminate` is called in its destructor if it is not *joinable*!). I do not want to store the thread inside BoostVM because, when the vm terminates, it is that thread which will delete it. If the thread call its own destructor we shall get that `std::terminate` as it is not yet *joinable* (although it will likely be just a few cycles later). Storing it outside seems to make things uselessly complex as we need not any reference to the thread instance. Waiting (*join* operation) is done by each VM creating some boost ASIO work, so we need not this functionality.
Also it is clearer the thread takes the execution from there of the new VM.