The copy is intentional here. But it might not be optimal.
So, app can either be an URL (not a very long string) or a pickled functor dumped to a std::string (which may be big). Currently, the VM creating another VM creates on its stack that string, and pass it to the constructor. We cannot "really" pass by reference to start, but it seems `boost::thread` already does the copy itself to thread-local storage so I added that `const std::string&`. See http://www.boost.org/doc/libs/1_55_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.launching and http://en.cppreference.com/w/cpp/thread/thread/thread.
The idea is that string to go away once unpickled, but this is not particularly easy. Explicit memory management with pointers could do that but it feels somewhat dirty. What do you think?