Refactored contract.rb and contract_symbols.rb.

@bsoetaer 
contract.rb was doing a lot of symbol manipulation before.  It's still doing a bit, for example when it loops through the secondary suffixes and concatenates them with the primary suffixes, but it's not much, and probably not worth moving into the symbols module.

After this, I'll just fix the invariant infinite loop and make it apply to all methods of the target class, and then I think we'll be ready to write some real contracts.

`default_proc` is the procedure to run when the key is _not_ found in the dictionary.  In this case, there's no transformation to make, and we just want to return the provided key.