Merge pull request #55 from collectiveidea/hooks

Add before and after hooks
Raise an Interactor::Failure error on context.fail!

This allows the interactor to abort execution immediately.
Refactor the organizers-within-organizers integration test

Calling "call" on the class is more consistent with actual usage.
Roll back on failure and error during after hooks
Write more realistic integration tests

…including a failing test due to after hooks being run after failure.
Fix test failure with context failure being swallowed up in an organizer
Share rollback responsibility between the interactor and the context

The interactor is responsible for defining rollback behavior for every
interactor. The context is responsible for keeping track of which
interactors have been successfully called on it.

This greatly simplifies the rollback logic that was shared across
different types of interactors.
Track the interactor instance within each context rather than the class

Any internal state stored with the interactor instance will also be
available during that interactor's potential rollback.
Refactor the organizer code
Remove the class level Interactor.rollback method

…in favor of Interactor::Context#rollback!
Build out integration test cases for hook failures/errors
Add more integration tests for non-deeply-nested failures and errors
Add integration testing around top-level organizer hooks bombing
Slim down the contractual interactor lint tests
Slim down the organizer unit tests to reflect the rollback refactoring
Refactor, removing the before_hooks and after_hooks instance methods
Refactor hook execution for symbols
Rename call_ methods to run_ methods in the hooks module

This coincides better with the Interactor#run methods and with Active
Record's use of "run" with validations and callbacks.
Unit test context rollback
Make the context available from raised failure

This is useful when an interactor is used in a background process or
other situation where the interactor needs to fail loudly. Having the
context available from the failure itself is useful for debugging.