Add in DataSource.

DataSource is an object that wraps data (an any[]) and metadata (any).
A Renderer is associated with a DataSource on creation and will auto-
rerender when the DataSource updates (the data or metadata changes).
Renderers can auto-create DataSources if they are passed data instead.

Close #277.