widgets: separated widget name and widget callback

This is the alternative implementation you mentioned in #61.  In order to set the widget type, you add a function named `widget_type` which returns a `char*` with the widget type.  It should look something like this...

```c
char*
widget_type () {
    return "desktops";
}
```