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)