runtime: String and symbol creation cleanup

- Remove StringCell::fromUtf8CString

  This was only used by the unit tests and it can be directly replaced
  with a call to fromUtf8StdString. This lets STL do the strlen()
  internally for us.

- Add SymbolCell::fromUtf8StdString and ::fromUtf8Data.

  Previously a SymbolCell needed to be created from a StringCell. This
  is consistent with R7RS where symbols can't be created directly.
  However, if we support reading symbols then this is quite inefficient
  as every symbol will require two allocations.
runtime: Support for reading enclosed symbols

This is almost entirely reusable for string parsing except line
continuations are unsupported.
runtime: Support for reading strings
runtime: Support for reading symbols

This treats any unknown data as an unenclosed symbol. This is a bit
tricky as +/- need to backtrack out of the number parsing code if it
doesn't represent a number prefix.
runtime: Support for reading #!unit
compiler: Short circuit symbol parsing

If a datum doesn't start with +, - or a digit it can't be a number. We
can use this to skip directly to symbol parssing if we don't recognise a
datum's prefix.

This is inspired by similar logic in the C++ DatumReader
runtime: Support for reading proper lists

This supports both round and square bracket delimited proper lists.
runtime: Support for reading improper lists

This also fixes an issue with symbols being immediately followed by
reserved characters. In particular, a closing brace was being read as
parse of a symbol.
runtime: Fix for writing symbols with syntax chars

Even though syntax characters such as brackets can be direcly printed
they need to be quoted or else they'll be misparsed.
runtime: Support reading vectors

This also makes sure to consume the closing character of lists.
runtime: Support for reading bytevectors

This is fairly inefficient - it's basically a vector read except the
elements are cast to std::uint8_t as they're read. This means that every
element needs to be GC allocated and then immediately discarded.