Before and After Hooks

Expand the API to include:

`before_assembly` - takes a block that'll get called at the top of the initializer. Perfect for calling `super` or something. The block receives no arguments.

`after_assembly` takes a block that'll get called at the end of the initializer. Perfect for calling `super` if you need to pass it something that your class was assembled from. The block receives no arguments... but private methods on the object being assembled are in scope?