Creating a widget registry on the Python side.

Widgets classes are registered on definition of the class using a decorator called `register`.

```Python
@register(key='Foo')
class Baz(Widget)
    #   ....
```
When not specifying any argument, the view name is used as a key. 
```Python
@register()
class Baz(Widget)
    #   ....
```

The motivation is twofold: 
1- Creation of Widgets from the JavaScript side
2- Graphical gui building interface, that needs to know about a registry of widgets. 

For the latter case rather than using a registry in the form of a `key: widget_class` dictionary as now, we could have some other metadata store with it:
```Python
key: {
    class: widget_class, 
    metadata: {}
}
``` 
The metadata could be used for categorization of widget (control, visualization, container) etc...
Namespaces are one honking great idea -- let's do more of those :) 
Just that a name like "Box" is really generic, and should not be reserved in the general namespace.