Pass `panel` extra params to the wrapping <div>

Before this commit, the `panel` helper ignored unknown options.
For instance the code:

```rhtml
<%= panel 'content', class: 'important', id: 'alert', data: {name: 'name'} %>
```

would simply generate the following HTML

```html
<div class="panel panel-default">
  <div class="panel-body">With extra params</div>
</div>
```

ignoring the `:class`, `:data` and `:id` parameter.
After this commit, the result is:

```html
<div class="important panel panel-default" id="alert" data-name="name">
  <div class="panel-body">With extra params</div>
</div>
```

which should partially mitigate #39.

---

This commit also reduces public API methods from PanelHelper

Before this PR, including `bh` in an app would include more methods
than necessary for panels: methods like `panel_string` or
`panel_class`, 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.