Restore bound datum each draw

Code will explain this one better.

At the moment, widgets can be implemented like this:

```javascript
var widgetType = sapphire.widgets.widget.extend()
  .draw(function(el) {
    // do stuff with `el` here
  })

var subwidgetType = widgetType.extend()
  .draw(function(el) {
    // do more stuff with `el` here
  })

// will invoke `widgetType`'s draw, then `subwidgetType`'s draw
d3.select('.widget')
  .call(subwidgetType())
```

This makes it easy for people to extend how a widget is drawn.

The currently widget draw methods change the data bound to the given element to normalise it to a format we can use inside sapphire. For example, if they give us `{heading: 'Foo'}` and tell us to use 'heading' as the title, we normalise this to `{title: 'Foo'}`. To not be rude, we backup the originally bound datum before calling the chain of draw methods and restore it afterwards.

We actually need to do this backup-and-restore thing for *each* draw method so that people don't get confused when they extend a widget and the data bound to it looks different to what they expected.