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)
OK, that what I was thinking, I am used to different argument names for descriptors, but also for this branch to just return `self`. Is there a reason to return `owner.lookup(self.name)` instead of just returning `self`?