Upgrade to RSpec 3

Inspired by @agilecreativity's pull request #37, the major changes are as follows:

* No longer rely on monkey patching by using RSpec.describe
* Use the new expect syntax for assertions
* Use the new expect syntax for mocking and stubbing
Hmm, I see. I'd rather use `be(true)` here, simply because it reads a bit better than `eq(true)`. It feels a bit off to talk about something being "equal to true" :). I'll leave it to you to decide if you want to change it, though.