Add throttle to scroll event
Fix #1665 (Grid.js): refresh rather than refreshCanvas columnDef watch

Allow dynamically adding columns by shifting to a refresh rather than
refresh canvas when the columnDef watch is triggered.

Also address #1586, ability to insert columns rather than just append.
Includes new tutorial, functional tests and unit tests, as suggested
in #1586.
Fix #1573(aggregation): make labels i18n and switchable

Add unit tests, extend e2e tests, add ngdoc.
Add dutch translation for aggregation
fix(pinning, i18n) move pinning translations to i18n folder.
We agreed that all translations regardless of which features it's used in will reside in one file per language
Adding swedish pinning translation
Fix #1674 (docs): upgrade tutorial error on externalScopes
fix(rowHeader) #1670 broke caused pinned columns to go to the left of row header.
small change to calculateStyles to allow running within unit test
Added more features to 401 tutorial
docs(contributing): add a first timers guide and a contributing tutorial
Fix #1691 (grid): generate column defs even if rowHeader already present

The data watch only generated column defs if there were no columns.  But
if the selection feature was enabled then there would be a rowHeader column
in place, and therefore it wouldn't generate column defs.
fix(Pinning): Fix pinning when col has dyanmic width

Change column's width to it's drawnWidth when it becomes pinned.

Fixes #1634
fix(Column Resizing): Don't update widths in colDef

column.drawnWidth wasn't being updated after column resizing. This change
does two things:

1. Prevent updating column.width in `updateColumnDef` if it already has a
value set and the value is a number. If the column has a width that's a
number then we're assuming the user has said "I want it to be this wide"
and we shouldn't override that.
2. In the column resizer feature, update column.width, not colDef.width.
Fix #1685: Remove col.index from most code, add col.uid

Tidies up much of the column behaviour.

Removed col.index everywhere it appears, except for in the cell content
templates.  For the cell content, replace with col.uid, which is now
uniquely generated when the column is created, and never changed again.

Should also fix #1694, but need to push to be sure.
Fix #1704(rowHeader): expose addRowHeaderColumn method, add tutorial
Fix #1702(gridCol): raise sortChanged on unsort
Fix #1690(rowEdit): dirty class shouldn't take precedence
doco(sort): clarify sort semantics for menu, fix #1688
enhancement(grid menu): refactor col menu, implement grid menu

Implement #1676 grid menu.  Also addresses #1648 and #1631, moving the
ng-hide from the menu inner to the menu.

Substantial refactor of column menu and grid menu.  Removed most of the
show/hide logic from column menu, rely on the functionality within
grid menu.  Moved to use a more-angular animate, which I'm not 100% is
working, but it looks the same as it did before on the tutorial pages.

I moved the menus to use ng-if instead of ng-hide.  When debugging the code
it became apparent to me that each menu item was being evaluated individually
every time the grid scrolled, which seemed like excess load for no reason.  By
moving to ng-if the elements are only in the DOM when someone actually clicks
the menu.  It seemed to make scrolling smoother, but I might have just wanted
to believe that.

New grid menu tutorial.

Modified exporter to insert options into grid menu, and added options to control
what is inserted.
Enh(Render): Add some error checking to grid rendering
Fix #1716: didn't compile

Apparently you need to be careful when running grunt dev that the
tests that are running relate to the code change you just made, and
aren't still the e2e tests running from the previous change.  Because
otherwise it doesn't even lint your code changes.  Sigh.