Add semantic classes to top-level containers for widgets

Supersedes #6256

This makes it much easier to customize all widgets of a certain type using
CSS.  For example, to change just the IPython widget selects, a CSS
rule like .widget-select select {...} should work well.