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.