Switch to concurrency safe makedirs()
Issue #39: Enable binary cache format revisions to coexist
Refactor all the things!

On a more serious note:

* I originally wrote pip-accel as a collection of functions that took
  their configuration defaults from environment variables interpreted at
  module import time (yes, I know, very ugly, I learned my lesson on
  that one!)

* Then pip-accel became more and more complex and soon I was passing
  huge blobs of state back and forth between these "standalone"
  functions. Passing all of that state back and forth quickly became
  unwieldy but fixing it would require a big rewrite of pip-accel.

* I didn't feel up to the task of a big rewrite without more test
  coverage but I also didn't feel like extending the test suite because
  that had become a very ugly affair because of the environment
  variables.

* Given the points above you can see how I very uncomfortably painted
  myself into a corner on this one :-)

The solution was to sit down for a very long weekend and, well, refactor
all the things! (based on an actual planning, believe it or not :-)

The result:

* The "new" pip-accel is written in OOP and uses dependency injection to
  make sure that testers/embedders/extenders can comfortably inject
  their customized configuration into pip-accel without ugly tricks.

* Because pip-accel mirrors pip's command line interface there isn't any
  room to add custom command line options (a bit awkward). This explains
  why environment variables were used until now (a bit awkward as well
  :-). I've long wanted to add support for configuration files (as
  requested in issue #41) but that was non trivial to add before this
  refactoring. Based on the new pip-accel it should be more or less
  trivial to add support for configuration files! :-)

  See also issue #41 on GitHub:
  https://github.com/paylogic/pip-accel/issues/41

* I tried to improve the documentation as I went along because my goal
  is for pip-accel to be an easy to use API for pip and the binary
  distribution aspect that pip-accel adds to the mix.

* Based on the new OOP API I extended the test suite's coverage to
  include more error checking and the system package dependency
  handling. I will be improving the coverage further because it should
  be above 90% (in my local tests I now get a coverage of 84%).

* As a first (small) step towards solving issues like #38 pip-accel now
  includes more checks to verify whether `python setup.py bdist_dumb`
  properly generates the expected binary distribution archive. The new
  version will still report an error but that error should clearly
  explain what is going on. The next step is of course to see if we can
  prevent that error from occurring in the first place :-)

  See also issue #38 on GitHub:
  https://github.com/paylogic/pip-accel/issues/38

(end of biggest commit message ever)
Added readonly flag for s3 cache
Updated Readme: S3_READONLY
Updated doc string for config.s3_readonly
Support for configuration files (issue #41)

See issue #41 on GitHub for details:
  https://github.com/paylogic/pip-accel/issues/41
Merge pull request #43: Added read only flag for S3 cache
Workaround broken `python setup.py bdist_dumb' implementations (issue #37)

See issue #37 on GitHub:
  https://github.com/paylogic/pip-accel/issues/37
Don't validate prefix vs. executable in install_binary_dist()

This actually prevents a (not yet public) use case of mine and given that
this is hidden deep inside of pip-accel I guess I can expect callers to
think about this themselves (thus allowing non standard use cases).
Silence noisy messages when Boto is not installed (unless $PIP_ACCEL_S3_BUCKET is actually set)
Forgot to update tests after changes in 481d89ad435
Support for setting configuration options at runtime
Support for S3 compatible storage services (issue #44)

This commit is a proof of concept, I haven't updated the readme and
documentation yet and I'm not going to publish this to PyPI until I have
updated those. First I want to get fakes3 running on Travis CI (in a
while I'll see how far these changes to .travis.yml get me :-)
Make sure Travis CI workers are up to date*

* https://travis-ci.org/paylogic/pip-accel/jobs/42932922
Bug fix to get fakes3 running on Travis CI*

* https://travis-ci.org/paylogic/pip-accel/jobs/42933113
Still working on fakes3 @ Travis CI* :-)

* https://travis-ci.org/paylogic/pip-accel/jobs/42933370

  DEBUG Retrieving credentials from metadata server
  ERROR Caught exception reading instance data
Start fakes3 with noise on Travis CI*

* I'm not sure what's going on but the same start-stop-daemon command that
  works for me locally is failing on Travis CI:

  https://travis-ci.org/paylogic/pip-accel/jobs/42933813
Fork FakeS3 to background instead of messing about with start-stop-daemon
Looks like the wrong Ruby is used on Travis CI*

* https://travis-ci.org/paylogic/pip-accel/jobs/42935628

  /usr/lib/ruby/vendor_ruby/1.8/rubygems/dependency.rb:247:in `to_specs':
  Could not find fakes3 (>= 0) amongst [...]