Separate requirements intent from version pins

One of the joys of the Python ecosystem is the lack of any sensible
tooling for managing software dependencies in a way that:

- doesn't result in dependency hell[1]
- allows for consistent deployments

In order to partially work around this problem, I've split our
requirements files into two parts:

requirements{,.dev}.in
  A file which expresses the *intended* version locking as loosely as is
  appropriate for development.

requirements{,.dev}.txt
  The fully version-locked and tested dependency list, to be used at
  deploy-time.

This allows us to avoid dependency hell by always being able to upgrade
using something like

    pip install --upgrade -r requirements.in

but ensures consistent deployments through the use of requirements.txt.
At the moment the process of updating the ".txt" versions will be a
combination of diffing against the output of "pip freeze" and manual
version pinning. This is tedious but is currently the only way (that I
know of) to avoid either dependency hell (version lock) or horrendously
inconsistent deployments.

This approach follows some of what Vincent Driessen has written on this
subject at http://nvie.com/posts/better-package-management/.

[1]: https://en.wikipedia.org/wiki/Dependency_hell