Added a Contract module to automate the inclusion of contracts.

I've pushed a prototype testing this functionality into the `contracts_prototype` branch.  Feel free to check it out and play around with it:

Run `irb` in the prototype directory.
```ruby
require './contracts_test'
sqr = Squarer.new
# do stuff, and observe the output from the contracts.
```
Asserts such as this one, or maybe all preconditions should include an error message if the assert fails. If an error message is not provided it appears to spew out a stack trace which wouldn't be that helpful to those using our code as a library.