refactor(tabs): adds support for non-fixed tabs

Closes #825.
Closes #460.
We should cache `angular.element(tabs)` into a variable at the top of `calculateTabData()` - it's semi-expensive to wrap nodes in jqLite.