Creating a widget registry on the Python side.

Widgets classes are registered on definition of the class using a decorator called `register`.

```Python
@register('custom.Baz')
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...
When you pass an argument to the decorator, it gives a name that is independent of the backend language. The R and Julia kernels will have an alternative implementation of the Slider, Text, and all the other core widgets.