Support easy (re)definition of failure chains

This branch makes it possible to declaratively specify failure chains and build on top of those later on.

An example:

```ruby
  ENV = Substation::Environment.build do
    register :sanitize,     Substation::Processor::Evaluator::Data
    register :authenticate, Substation::Processor::Evaluator::Request
    register :authorize,    Substation::Processor::Evaluator::Request
    register :validate,     Substation::Processor::Evaluator::Data
    register :call,         Substation::Processor::Evaluator::Pivot
    register :wrap,         Substation::Processor::Wrapper
    register :render,       Substation::Processor::Transformer
  end

  module App

    AUTHENTICATION_ERROR = Demo::ENV.chain { wrap Error::AuthenticationError }
    AUTHORIZATION_ERROR  = Demo::ENV.chain { wrap Error::AuthorizationError }
    VALIDATION_ERROR     = Demo::ENV.chain { wrap Error::ValidationError }
    INTERNAL_ERROR       = Demo::ENV.chain { wrap Error::InternalError }

    AUTHENTICATE = ENV.chain do
      authenticate Handler::Authenticator, AUTHENTICATION_ERROR
    end

    AUTHORIZE = ENV.chain(AUTHENTICATE) do
      authorize Handler::Authorizer, AUTHORIZATION_ERROR
    end


    CREATE_PERSON = ENV.chain(AUTHORIZE) do
      validate Validators::NEW_PERSON, VALIDATION_ERROR
      call Actions::CreatePerson, INTERNAL_ERROR
    end

  end

  module Web

    SANITIZATION_ERROR = Demo::ENV.chain { wrap Error::SanitizationError }

    CREATE_PERSON = Demo::ENV.chain do
      sanitize Sanitizers::NEW_PERSON, SANITIZATION_ERROR
      chain App::CREATE_PERSON
    end

    module HTML

      SANITIZATION_ERROR = Demo::ENV.chain(Web::SANITIZATION_ERROR) do
        wrap   Views::MalformedInput
        render Renderer::SanitizationError
      end

      AUTHENTICATION_ERROR = Demo::ENV.chain(App::AUTHENTICATION_ERROR) do
        render Renderer::AuthenticationError
      end

      AUTHORIZATION_ERROR = Demo::ENV.chain(App::AUTHORIZATION_ERROR) do
        render Renderer::AuthorizationError
      end

      VALIDATION_ERROR = Demo::ENV.chain(App::VALIDATION_ERROR) do
        render Renderer::ValidationError
      end

      INTERNAL_ERROR = Demo::ENV.chain(App::INTERNAL_ERROR) do
        render Renderer::InternalError
      end

      CREATE_PERSON = Demo::ENV.chain(Web::CREATE_PERSON) do
        failure_chain :sanitize,     SANITIZATION_ERROR
        failure_chain :authenticate, AUTHENTICATION_ERROR
        failure_chain :authorize,    AUTHORIZATION_ERROR
        failure_chain :validate,     VALIDATION_ERROR
        failure_chain :call,         INTERNAL_ERROR
        wrap Presenters::Person
        wrap Views::Person
      end

    end # module HTML

  end
```

EDIT: The DSL changed during the course of implementing this