Refactor togglecolumns plugin to work externally

@spmason please review, low priority from Funky Friday.

I have refactored the toggle columns plugin to allow it to be triggered by an element outside of the table.

Initialising a view that uses ToggleColumns:
```javascript
var toggleColumns = this.toggleColumns = new ToggleColumns();
toggleColumns.customColumns.push({id: 'snippets', name: 'Show snippets'});
```
Opening the ToggleColumns menu in response to a click event:
```javascript
toggleColumns.show({
    table: table,
    $showtrigger: $(e.target)
});
```