stdlib: Fix time.c build on Linux
Support for non-recursive datum labels

This adds support for datum labels. This is useful for sharing repeated
data structures in s-expressions.

Unlike R7RS datum labels aren't defined until the datum is fully parsed.
This means it's not possible to define recursive data structures using
labels. It would be significant work to add support for recursive ASTs
in the compiler even if it was supported by the parser.

Closes #35
runtime: Remove StringCell::allocSlackBytes()

StringCell internally stored the number of extra bytes in its
SharedByteArray allocation inside a 16bit integer. This had a number of
issues:

- The logic to track the allocation slack was complex and error-prone.

- More than 32KiB of slack could not be recorded

- When adopting a SharedByteArray from a SymbolCell or BytevectorCell
  the slack would not be known

Instead add a SharedByteArray::capacity() so we can directly calculate
our shared byte array capacity. This has the disadvantage of not being
able to detect slack without a platform specific implementation but it
should be worth the complexity reduction.
runtime: Wrap comment at column 120
runtime: Add OS X version of (current-jiffy)

This uses Mach absolute time on OS X to implement (current-jiffy). This
has nanosecond resolution unlike the microsecond resolution provided by
gettimeofday().

This also moves the time specific code to platform/time.cpp. It's
becoming a mess of preprocessor directives that should be separate from
the stdlib itself.
stdlib: Avoid temp std::vector in (reverse)

Instead of building a temporary vector of our elements in reverse order
we can just construct the new list in-place. This has two advantages:

- This is faster for smaller lists (< 1000 elements) due to avoiding an
  allocation

- For larger lists this reduces our maximum memory usage and improves
  our cache efficiency