Use pessimistic version constraint for all runtime dependencies

Please read [**Using >= Considered Harmful (or, What’s Wrong With >=)**](http://yehudakatz.com/2010/08/21/using-considered-harmful-or-whats-wrong-with/) by @wycats. If anyone understandings Ruby versioning best practices, it’s Yehuda. This blog post is specifically about gems (as opposed to apps). Here is the most relevant passage:

> One thing for certain though: you cannot be sure that your gem works with every future version of your dependencies. Sanely versioned gems take the opportunity of a major release to break things, and until you have actually tested against the new versions, it’s madness to claim compatibility. One example: a number of gems have dependencies on activesupport >= 2.3. In a large number of cases, these gems do not work correctly with ActiveSuport 3.0, since we changed how components of ActiveSupport get loaded to make it easier to cherry-pick.
>
> Now, instead of receiving a version conflict, users of these gems will get cryptic runtime error messages. Even worse, everything might appear to work, until some weird edge-case is exercised in production, and which your tests would have caught.

I’d be curious to hear where you disagree.