Contract decorator

@bsoetaer 
There's a bunch of duplicate code, because the contract decorator didn't quite work with modules, but other than that, it's pretty straightforward.
One quick way to do DRY for this assignment is to just scrap the ContractDecorator code and leave the ModuleContractDecorator stuff because we don't use the ContractDecorator stuff. Problem will re-emerge if future assignments need both modules and classes.