Improve DataTable

fixes #1382.

TODO:
- [x] make slick-grid independent of external styling (currently it looks different in html, server and notebook).
- [x] add support for (multi-column) sorting
- [x] make `DataTable` editable
- [x] restore auto-complete editor
- [x] fix sizing of `DataTable` widget
- [x] figure out correct column sizing (`forceFit` works inconsistently)
- [x] investigate display issues on the server (most likely server's bootstrap issue)
- [x] fix editors based on spinner to show buttons
- [x] implement cell formatters

TODO in a follow-up PR:
- [ ] add support for external editors (not directly embedded in cell's HTML)
- [ ] finish remaining editors (text, time, date, etc.)
- [ ] figure out why `select` ignores `keydown` event (prevents editor from using arrows)
Previously `Plot.plot_width` would return the associated value (some integer). That's obviously wrong for a class property, so now it returns the actual property, e.g.:
```
In [1]: from bokeh.models import Plot

In [2]: Plot.plot_width 
Out[2]: <bokeh.properties.Int at 0x7f647f286590>
```
We don't have to use `lookup()` or `lookup_descriptor()` directly anymore.