Better errors

Improve error reports.

### All the errors

Each error has now a complete set of informations.

```ruby
# from
validator.errors # => { :age => [:size] }

# to
validator.errors # => { :age => [#<Lotus::Validations::Error:0x007f8255de2c20 @attribute=:age, @validation=:size, @expected=18..65, @actual=15>] }
```

### Single attribute errors

It now hides implementation details `Hash#[]` to `Errors#for`.

```ruby
# from
validator.errors[:age] # => [:size]

# to
validator.errors.for(:age) # => [#<Lotus::Validations::Error:0x007f8255de2c20 @attribute=:age, @validation=:size, @expected=18..65, @actual=15>]
```

### Iteractions

It now returns a flatten set of `Error` instances, and hides the nested data. It exposes `#each` and `#map`.

```ruby
# from
validator.errors.each do |attribute, errs|
  errs.each do |error|
    puts error # => :size
  end
end

# to
validator.errors.each do |error|
  puts error.attribute  # => :age
  puts error.validation # => :size
  puts error.expected   # => 18..65
  puts error.actual     # => 15
end
```

### Adding errors

Again, it hides implementation data: `Hash` and `Array`.

```ruby
# from
validator.errors[:age].push(:size)

# to
validator.errors.add(:age, :size, 18..65, 17)
```

### Counts

It returns the count of the flatten errors, via `#count` or `#size`.

```ruby
# from
validator.errors.values.flatten.count # => 3

# to
validator.errors.count # => 3
```
Closes #3