RowEdit feature, row-by-row save to server

Provide a feature, tutorial and unit tests for rowEdit feature.

Seeks to save row-at-a-time, including stopping editing a row
that is currently saving, showing error rows in red, and noticing
when a user is still editing the same row, and not saving until
they move off that row.

Includes three changes in non-row-edit files:

- add beginCellEdit and cancelCellEdit events to the edit feature,
rather than listening to non-public api calls
- modify edit feature to not allow editing of a row that is currently
saving (one line change)
- add a `renderingComplete` event to core, and register that event
immediately the api is instantiated, allowing features and external
users to register for that event in their initialize block.  This
event does the same thing as onRegisterApi, but is multi-user/broadcast,
rather than only accessible to a single module.  (Otherwise if rowEdit
used onRegisterApi it was no longer available to the end-user to use)
Merge pull request #1571 from PaulL1/row_edit

RowEdit feature, row-by-row save to server