All: Classes Option

This replaces PR #790 It updates the widget factory to handle the classes option via setOption, and updates all the widgets to use the `_elementsFromClassKey` method to set what elements belong to what classkeys for programmatic updating. It also updates all classes options to use `""` instead of `null` to make it easier to concant new classes. 
It one point I was on a quest to write tests to make sure that all widgets correctly cleaned up after themselves when they were destroyed. There were a few widgets that didn't correctly remove all of their classes. Can't remember if dialog was one of them or not.