Reduce public API methods from DropdownHelper

Before this PR, including `bh` in an app would include more methods
than necessary for dropdowns: methods like `dropdown_div_class` or
`dropdown_list_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.
Allow `dropdown` to display full-width buttons

If dropdown is called with `{layout: :block, groupable: false}` then
the dropdown button will occupy the full width of its parent.
Reduce duplication when testing dropdown