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/image_writer.cc b/src/image_writer.cc
index 33d37c7..c876329 100644
--- a/src/image_writer.cc
+++ b/src/image_writer.cc
@@ -136,12 +136,11 @@
 }
 
 bool ImageWriter::AllocMemory() {
-  typedef std::vector<Space*> SpaceVec;
-  const SpaceVec& spaces = Runtime::Current()->GetHeap()->GetSpaces();
+  const Spaces& spaces = Runtime::Current()->GetHeap()->GetSpaces();
   size_t size = 0;
-  for (SpaceVec::const_iterator cur = spaces.begin(); cur != spaces.end(); ++cur) {
-    if ((*cur)->IsAllocSpace()) {
-      size += (*cur)->Size();
+  for (Spaces::const_iterator it = spaces.begin(); it != spaces.end(); ++it) {
+    if ((*it)->IsAllocSpace()) {
+      size += (*it)->Size();
     }
   }