Thread::Join() is now public.

This is specifically to support TcpSession::Terminate(), but I beleive this
is ok more generally: If a code has a handle to another thread, I don't see
any good reason why it shouldn't be allowed to Join() that thread.
Add SocketTcpSession::Terminate()

This is called by SocketTcpServer::~SocketTcpServer(), per each
SocketTcpSession, immediately *before* calling the SocketTcpSession's
virtual dtor. This guarantees that the session thread has exited
before we destroy the session.

This synchronisation is currently done in extensive per-subclass
boilerplate: We should be able to remove that code now.