Track SBT version for reproducible build setup
Clean up build configuration

- Use a version val for Spray deps
- We're not publishing release artifacts, so everyone's home-compiled
  jars should probably be SNAPSHOT
- Duplicate spray-can dep
Express HttpAdapter dependency with cake-style trait

This starts trimming down the arguments that the Client constructor
accepts, and paves the way for some forthcoming refactoring.
Make missing key configuration a compile-time error

Throwing exceptions is not idiomatic in Scala land. Try is better, but if we
wrapped every API call in a Try because of the possibility of a missing API
key, then we’d be giving callers an awkward Try[Future[Response]] to unpack for
every method, which is not much less onerous than forcing them to handle with
try/catch.

This factors client functionality into a separate trait for every access level
(read, write, master). You must mix one of these traits into a Client instance
in order to be able to make calls requiring that level of access, and each
level’s trait defines its key field as abstract so that failing to provide it
*errors at compile time*. No more runtime checks.

If you want to read and write, for example, you initialize a client like this:

    val keen = Client.new("projectID") with Reader with Writer {
      val readKey = "myReadKey"
      val writeKey = "myWriteKey"
    }

As a next step, we'll have the keys default to values from a config file so
that this will become simpler:

    val keen = Client.new("projectID") with Reader with Writer

The Master trait allows reading, writing, and master operations with only one
mixin and key configuration value required, which of course should be
discouraged when master isn't needed, but it reflects semantically how the API
handles master authorization.

This needs documentation updates and new unit tests, but since it's still an
incremental step with a config file coming next (via Typesafe Config), I wanted
to see how well that works out before fully updating everything.
Further restrict AccessLevel’s self-type to Client

In ongoing work to make Client configuration less dependent on lots of
constructor params, it was becoming clear that the AccessLevels would
want to use a few more of Client’s facilities beyond just the HTTP
adapter.

We really intend the usage of these to be mixing into Client, and you
can say that a Writer "is a" (augmented) Client, so let’s express that
clearly and conservatively.
Docs for access levels
Merge pull request #20 from ches/access-levels

Access levels - making missing keys a compile-time error