Refactor spaces and add free list large object space

Added some more abstraction for spaces, we now have ContinuousSpaces and DiscontinousSpaces.

Added a free list version of large object space.

Performance should be better than the memory map version since we avoid creating more than
one memory map.

Added a cause for Gc which prints with the Gc message, dalvik has this as well.

Change-Id: Ie4aa6b204fbde7193e8305eb246158fae0444cc1
diff --git a/src/thread.cc b/src/thread.cc
index 15a4f1b..ba8763c 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -1860,12 +1860,15 @@
                 }
                 spill_shifts--;  // wind back one as we want the last match
                 ref = reinterpret_cast<Object*>(GetGPR(spill_shifts));
+                if (ref != NULL) {
+                  root_visitor_(ref, arg_);
+                }
               } else {
                 ref = reinterpret_cast<Object*>(GetVReg(cur_quick_frame, code_item, core_spills,
                                                         fp_spills, frame_size, reg));
-              }
-              if (ref != NULL) {
-                root_visitor_(ref, arg_);
+                if (ref != NULL) {
+                  root_visitor_(ref, arg_);
+                }
               }
             }
           }