Squeak context cache

*) Contexts can only be 2 sizes, small or large (16 slots and 56 slots, respectively)
*) 2 linked list are kept, one for each size
*) When needing a context, the correct list is checked first to see if there is
   one available.
   *) Shift the first, linked list style.
*) If not, allocate one normally.
*) On context allocation (from heap or cache, reclaimable count is incremented
*) On return, if reclaimable is greater than 0, recycle the context we were using,
   and decrement reclaimable.
   *) Only try and reclaim contexts in the young area.
*) When switching to a new Process, zero out reclaimable.
   *) This protects all existing contexts from being reused.
*) Pushing the active context also zero's out reclaimable, so that context
   which are or may be referenced aren't recycled.
*) On GC, the lists are emptied.

== Notes ==
*) There is no flag in contexts to see if it can/should be recycled. Careful
   control of the reclaimable count is used only.
*) Hinges on there only being 2 size contexts.
   *) This could be expanded to a larger number of possible sizes, but it can't
      be arbitrary. If it were, pulling out of the list would requiring checking
      if the context was big enough, and we'd have to then search the list to find
      one thats big enough. This quickly becomes more expensive than just allocating
      one (i'm guessing).
