runtime: GC root naming cleanups

- Rename "ref ranges" in to roots

  The interface was confusing reference classes with internal pointers
  (i.e. StrongRef) with ones that pointed to external data (i.e.
  StrongRefRange). The "range" versions are really declared GC roots and
  the naming should reflect that

- Remove StrongRoot's std::vector constructor. This too easily hid the
  fact that the StrongRoot was taking a reference to the vector's
  internal data and would become invalid if the vector was resize.
  Instead, have callers explicitly pass .data() and .size() to make it
  clear what's happening

- Introduce StrongRefVector. This combines the functionality of a
  std::vector with a StrongRoot. Any operation that could potentially
  resize the vector will automatically update the the corresponding GC
  root.

- Remove the StrongRoot aliases for each type. The use of StrongRoot
  should be discouraged in favour of StrongRef and StrongRefVector which
  are inherently safer.

- Add ProperList::create and ListElementCell::createList overloads that
  take a StrongRefVector