unnecessary ternary operator
Add throttle to scroll event
fix(core) row searcher was trying to call an api when the api wasn't available yet
Enhancement(rowEdit): allow suppression of timers, fix getRowsDirty

Timers can be suppressed by setting `rowEditWaitInterval` to -1, which
means user must manually call `flushDirtyRows()`.

getRowsDirty and getRowsError now return `[]` if there are no rows,
rather than undefined, allowing users to call `getRowsDirty().length > 0`
without doing a null check.
Doc(selection tutorial): add example of no rowHeader
Fix #1023 (rowSort): allow nulls to propagate to sort functions

Add a new core.api of sortHandleNulls, and use this same method in
each of the sorters.  Add unit tests to sorters.  Minor fixes along with
that to allow false values to be sorted, and to not accidentally fail to
sort 0 and false values.

Extend tutorial to demonstrate sort function.
Enhancement(rowEdit): allow styling of dirty rows
fix(cellNav) fix for #1410
added enableInfiniteScroll to grid options
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.