Base paths for value sets

You can now provide a “base path” for each of the value sets in an
environment.  If you use `bz_env_get_path` to retrieve the value of an
environment variable, and the value set that provides the value has a
base path set, and the content of the variable is a relative path, then
we'll automatically concat the two together before returning the result.
We're going to use this in our filesystem repositories, so that we can
correctly interpret any relative paths mentioned in a YAML configuration
file.

(Note that a base path is a property of a value set, not of the
environment as a whole.  That's because we might have environments that
consist of several value sets, each of which is defined in a different
place, and which therefore should have a different base path.)
YAML environments

This patch adds functions for loading in an environment value set from a
YAML file.  The YAML file must contain a top-level mapping node.  We
currently only support looking for bare string keys in that top-level
mapping.  When we find a value in the YAML file, it must currently be a
string.  We assume that the string is an interpolated value, so you can
put ${var} references in the YAML content.  We might eventually support
additional kinds of YAML values (probably based on tags, which would
then be used to instantiate different value providers).  Soon we will
also support nested mappings in the YAML, with environment variables
with names like `a.b.c` being used to delve deeper in to the YAML
content.
Nested YAML environments

We can now read environment variables such as `a.b.c` from a collection
of nested mappings in a YAML file.  To read `a.b.c`, for instance, you
now need a YAML file that looks like:

    a:
      b:
        c: value
Cache values in YAML environments

The YAML value set implementation now caches any variables that you
retrieve from the YAML file.  This gives us a slight (but probably not
noticeable) speed boost when we read the same value from the YAML file
multiple times.  More importantly, it means that we don't have a memory
leak, since the value set is responsible for freeing any values that it
returns.  (Before, we weren't keeping track of the value instances at
all, so we never had a chance to free them.)
Repositories

This patch adds an interface for “repositories”, which are collections
of package definitions and any other related objects.  The most common
repository will come from looking for a `.buzzy` subdirectory somewhere
near the current working directory; this is how you build a package from
within its source checkout, presuming that the source tree includes a
Buzzy package definition.  Other repositories will come from “links”
defined in this default repository.