stdlib: Fix multi-operand (map)

(map) was only advancing the first list when iterating over arguments.
This unit test was incorrect and did not catch this.
stdlib: Implement environment variable access

This implements (get-environment-variable), (get-environment-variables)
from R7RS. (get-environment-variable) could easily be implemented in
terms of (get-environment-variables) but constructing all the unused
strings could be potentially expensive.
typegen: Don't create cellrefs for const cells

If a cell is known to be of a preconstructed type it does not make sense
to take a GC reference to it - all of its instances are constant. This
shouldn't be explicitly disallowed but the cell ref aliases
(e.g. EmptyListRef) clutter the namespace and could be misleading.
stdlib: Implement (file-exists?)

This adds a new "test-files" resources directory and passes it through a
LLAMBDA_TEST_FILES_BASE environment variable. A new (get-test-file-path)
procedure in the test-utils library will read that environment variable
and construct the final path.
stdlib: Implement (open-input-file)

- Extend the (assert-raises) macro to take a predicate function to
  ensure the thrown object is of the correct type

- Add a "file" ErrorCategory and expose it through (file-error?)

- Implement (open-input-file) and have (open-binary-input-file) alias is
stdlib: Implement (open-output-file)

This is difficult to test without leaving extra files behind. We just
open /dev/null and write a string to ensure it's basically sane.
stdlib: Implement file opening utility procedures

Implement (call-with-input-file), (with-input-from-file),
(call-with-output-file) and (with-output-to-file). These are fairly
trivial combinations of existing procedures.
stdlib: Implement (delete-file)

This is hard to test without potentially leave files behind on failed
tests. This just tests the error case.
llvmir: Escape string double quotes as \22

With LLVM 3.5 \" does not appear to work correctly. Instead use its hex
escape of \22.
stdlib: Implement (read)

This is a simple wrapper around DatumReader
runtime: Better reporting for read/file errors

- If a stream doesn't have a known offset we were reporting the offset
  as 2^63-1. This can happen when invoking (read) on stdin. Instead
  don't report the offset at all in that case.

- When outputting an error include the category for non-default
  categories
runtime: Make DatumReader use streambuf

Instead of using the high level istream interface use the streambuf
functions directly. This lets us avoid repeatedly constructing sentry
objects, sometimes multiple times per byte. This saves CPU cycles,
especially with tied streams such as cin.

On Ubuntu 14.10/x86-64 this reduces the total instructions used to parse
all the Scheme source in Llambda from stdin and write it to stdout by 30%
runtime: Fix hexadecimal misspelling
stdlib: Implement (write-bytevector)

After validating the slice and output port we can write directly from
the bytevector's data.
stdlib: Implement (bytevector-copy)

This is a simple wrapper around BytevectorCell:copy()
runtime: Implement (bytevector-copy!)

This is a simple wrapper around BytevectorCell::replace()
runtime: Implement (vector-copy!)

This is essentially identical to (bytevector-copy!)
stdlib: Implement (string-copy!)
compiler: Hygienic ellipsis and wildcard in macros

- Export ... and _ as primitives from (scheme base). They are listed as
  part of the bindings in (scheme base) as R7RS

- Match ellipsis as a syntax variable instead of by name. This means
  that macros creating macros will have ... treated hygienically: if
  ... is bound to another variable it won't be treated as a zero or more
  identifier.
compiler: Make => a primitive

In R7RS => is "auxiliary syntax" exported by (scheme base). This is easy
to achieve by exporting it as a primitive through (llambda internal
primitives). This makes it the macros that reference it automatically
bind to that value.