Python 3 compatibility
Basic command-line program

It doesn't handle anything except for the built-in `--help` and
`--version` options, but it's a start.
OS detection framework

This patch adds a function that determines the current operating system.
Right now we only detect Arch Linux.  I've also added an `info`
subcommand (which is the default if you don't explicitly name a
subcommand), which prints out the location of the package database and
the OS that was detected.
Merge branch 'feature/cmd' into develop

* feature/cmd:
  OS detection framework
  Basic command-line program
  Python 3 compatibility
Better OS detection

This is a lot cleaner.  The detection function sets the
`buzzy.config.os` global variable if it detects an operation system.
This variable is now a Python object, which we will expect to implement
a particular interface.  The OS objects can still define extra
subcommands, but these are included right in the OS object, rather than
us playing weird module-loading games to find them.
Dependency walker

This patch adds a function that calculates the transitive closure of a
package's dependency chain.  There's also a new `install` subcommand
which currently just prints out the list of packages that it would try
to install.
Installing native packages on Arch

You can now mark a package has being natively available on Arch Linux by
adding the following to your package definition:

    arch:
        native: [package-name]

This patch also includes new helper functions for calling subprocesses,
with or without sudo.  Under normal operation, we'll collect the output
of the subprocess, and only display it if the subprocess fails.  By
giving a `--verbose` option, we'll go ahead and print out all of the
output as it happens.
Distinction between “recipes” and “packages”

We're now more careful to distinguish between “recipes”, which are the
OS-agnostic Buzzy description files, and “packages”, which are the
OS-specific artefacts that are built and installed.
Merge branch 'feature/package-desc' into develop

* feature/package-desc:
  Distinction between “recipes” and “packages”
  Installing native packages on Arch
  Dependency walker
  Better OS detection
Visitor interface for YAML objects

This patch adds a new set of classes and functions for visiting the
contents of a YAML document.  This should make it easier to write the
packaging rules for each of the OSes that we need to support.
Initial support for building Arch packages
Install built Arch packages
git and cmake support in Arch packages

We also check whether a package is installed before trying to
build/install it.
Autodetect native Arch packages

If the recipe name is the same as the native Arch package, then we can
now autodetect that.  If there's a package with the same name that
*shouldn't* be used for the recipe, you can set `arch.native` to
`false`.  If the native package doesn't have the same name, you can
still set `arch.native` to the correct package name.
Merge branch 'feature/arch-build' into develop

* feature/arch-build:
  Autodetect native Arch packages
  git and cmake support in Arch packages
  Install built Arch packages
  Initial support for building Arch packages
  Visitor interface for YAML objects
Persistent options moved to an environment

We now store persistent options in a YAML configuration file in an
“environment” directory.  This is also where we will (by default) build
any packages.  It doesn't have to be (and probably shouldn't be) inside
of your recipe database; one of the configuration options is the
location of the database.

End result, you should run all of the buzzy commands from within an
environment directory.  And you should use the `buzzy configure` command
to set up your environment.
Detect when Arch packages are already built

We now store each built package outside of the build tree that makepkg
creates.  That way that persist across multiple builds, and we can now
detect whether the package is already built.
Merge branch 'feature/env' into develop

* feature/env:
  Detect when Arch packages are already built
  Persistent options moved to an environment
Remove visitor pattern

Well that was fast.  We now translate the YAML dictionaries into actual
Python objects.  Still a lot of helper functions and classes, but a bit
easier to handle once they've been loaded in.
Decode bytes value in version.py