Pass `progress_bar` extra params to the bar <div>

Before this commit, the `progress_bar` helper ignored unknown options.
For instance the code:

```rhtml
<%= progress_bar percentage: 30, label: 'Extra params', class: :important, id: 'my-bar', data: {value: 1} %>
```

would simply generate the following HTML

```html
<div class="progress">
  <div class="progress-bar" role="progressbar" style="width: 30%" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">
    Extra params
  </div>
</div>
```

ignoring the `:class`, `:data` and `:id` parameter.
After this commit, the result is:

```html
<div class="progress">
  <div class="important progress-bar" id="my-bar" data-value="1" style="width: 30%" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100">
    Extra params
  </div>
</div>
```

which should partially mitigate #39.

---

This commit also reduces public API methods from ProgressBarHelper

Before this PR, including `bh` in an app would include more methods
than necessary for progress bars: methods like `progress_bar_string` or
`context_for` that should only be accessed privately.

This PR extracts those private methods into a new Button class
that includes all the business logic to render elements and edit
attributes (e.g., attach classes), leaving the helper cleaner.