Change allocation of ThreadData to be physically part of the object containing it
Make Thread::state private
Move and rename ThreadData::FreeThread() to ThreadEngine::Stop()

Add documentation
Move and rename class ThreadData to ThreadEngine::ThreadState