Add packing to class Thread.

Otherwise, code compiled on the host can use different offsets than
we need for the same structure on the target.

Also add commented-out code to start up the various GC daemon threads.
More Class native methods need to be implemented before that will work.

Change-Id: I618b647b92378eec1b25cee469c8cfccf42f21fd
diff --git a/src/monitor.cc b/src/monitor.cc
index 1a5e6c9..cc74838 100644
--- a/src/monitor.cc
+++ b/src/monitor.cc
@@ -511,7 +511,7 @@
     self->SetState(Thread::kWaiting);
   }
 
-  self->wait_mutex_.Lock();
+  self->wait_mutex_->Lock();
 
   /*
    * Set wait_monitor_ to the monitor object we will be waiting on.
@@ -529,7 +529,7 @@
   if (self->interrupted_) {
     wasInterrupted = true;
     self->wait_monitor_ = NULL;
-    self->wait_mutex_.Unlock();
+    self->wait_mutex_->Unlock();
     goto done;
   }
 
@@ -540,9 +540,9 @@
   lock_.Unlock();
 
   if (!timed) {
-    self->wait_cond_.Wait(self->wait_mutex_);
+    self->wait_cond_->Wait(*self->wait_mutex_);
   } else {
-    self->wait_cond_.TimedWait(self->wait_mutex_, ts);
+    self->wait_cond_->TimedWait(*self->wait_mutex_, ts);
   }
   if (self->interrupted_) {
     wasInterrupted = true;
@@ -550,7 +550,7 @@
 
   self->interrupted_ = false;
   self->wait_monitor_ = NULL;
-  self->wait_mutex_.Unlock();
+  self->wait_mutex_->Unlock();
 
   // Reacquire the monitor lock.
   Lock(self);
@@ -601,9 +601,9 @@
     thread->wait_next_ = NULL;
 
     // Check to see if the thread is still waiting.
-    MutexLock mu(thread->wait_mutex_);
+    MutexLock mu(*thread->wait_mutex_);
     if (thread->wait_monitor_ != NULL) {
-      thread->wait_cond_.Signal();
+      thread->wait_cond_->Signal();
       return;
     }
   }