Params validations and coercions

## Params validations & coercions.

### Validations

Given the following action:

```ruby
module Signup
  class Create
    include Lotus::Action

    params do
      param :email, required: true
    end

    def call(params)
      halt 400 unless params.valid?
      # ...
    end
  end
end
```

When the given params don't satisfy validations:

```
action = Signup::Create.new
action.call({}) # => [400, {}, 'Bad Request']

action.errors.for(:email)
  # => [#<Lotus::Validations::Error:0x007fabe4b432e0 @attribute=:email, @validation=:presence, @expected=true, @actual=nil>]
```

```
action = Signup::Create.new
action.call({email: 'test@lotusrb.org'}) # => [201, {}, '...']

action.errors.empty? # => true
```

### Coercions

```ruby
module Signup
  class Create
    include Lotus::Action

    params do
      param :age, type: Integer
      param :eula, type: Boolean
    end

    def call(params)
      halt 400 unless params.valid?
      puts params.age # => 23
      puts params.eula # => true

      # ...
    end
  end
end

action = Signup::Create.new
action.call({age: '23', eula: '1'}) # => [201, {}, '...']
```

### Accessors & exposures

This proposal adds two default exposures `params` and `errors`.

```ruby
action.params
action.errors
```

It also introduces a new way to access params: via getters.

```ruby
def call(params)
  # those two calls are equivalent
  params[:age]
  params.age
end
```

For a complete reference, please have a look at [`Lotus::Validations`](https://github.com/lotus/validations).

Closes #22