Reduce alert box helper overhead

Before this PR, including `bh` in an app would include more methods
than necesasry for alert boxes: methods like `alert_string` or
`contexts`, that should only be accessed privately.

This PR extracts those private methods into a new AlertBox class
that includes all the business logic to render elements and edit
attributes (e.g., attach classes), leaving the helper cleaner.