- added example (based on examples/example-header-row.html) which shows / tests the EditorLock commit/cancel logic where clicking on a header cell will 'autocommit' the pending edit of a grid cell and vice versa: only one edit going on anywhere.

- added code to autocommit the active cell edit when the user moves focus elsewhere (focusout/blur)

- the extra headerRow (options.showHeaderRow) is now rendered employing SlickGrid Formatters compatible logic (a formatter can be assigned via options.defaultHeaderRowFormatter or via the options.formatterFactory.getHeaderRowFormatter, for example)

- unified the logic in getFormatter and getEditor so that the procedure/decision which formatter/editor to use in a given cell is consistent, which is pick the first available from this list:
  + first the column metadata-based override obtained as data.getItemMetadata(row, cell).columns[column.id or cell].<editor|formatter|headerFormatter|headerRowFormatter>
  + then the column metadata-based override obtained as data.getItemMetadata(row, cell).<editor|formatter|headerFormatter|headerRowFormatter>
  + then the column definition based override obtained as grid.getColumns()[cell].<editor|formatter|headerFormatter|headerRowFormatter>
  + then the factory-based override obtained as options.<editor|formatter>Factory.<getEditor|getFormatter|getHeaderFormatter|getHeaderRowFormatter>(columnDef, row, cell)
  + use the default handler specified in options.default<Editor|Formatter|HeaderFormatter|HeaderRowFormatter>

- return the result returned by the notified Slick.Event handlers: now each subscribed handler can adjust the return value, instead of Slick.Event.notify only listening to the return value of the handler which was executed last: the notified event handlers receive the existing 'return value' as a third parameter (handler.call(scope, Slick.EventData, notify:args, notify:returnValue) -> returnValue)

- provide a Slick.Formatters.Text which is an exact replica of the default options.defaultFormatter except this one produces a HTML string which has the formatted value wrapped in a basic SPAN tag.

- test an experimental 'position:absolute'approach for the top header row... we know this is hairy...

- a few more assert()ions placed in the code to catch miscreants at run-time

- added the Ben Alman (+ augmentation) debug library to the new examples/example-focus-and-commit-on-blur.html

- try to ensure that jQuery does not include the title and style attributes for rendered nodes which do not have any (no tooltip text and no styles, respectively): .attr("style", null) & .attr("title", null)

- onHeaderCellRendered and onHeaderRowCellRendered event handler argument object now includes the numerical column index in the .cell field, next to the matching column Definition object which was already available in the .column field

- bugfix: the onColumnsResizing event was listed in the interface but not hooked up: it would have never fired!

- documented a few functions in the source code (JSDoc)

- DOUBLEclick on a cell now will ALWAYS init the cell editor immediately: in this scenario the options.asyncEditorLoading timeout is ignored and the editor is invoked 'inline'. Note: This behaviour can be 'overridden' by the old 'async editor loading' behaviour anyhow by specifying options.asyncEditorLoading=2 instead of options.asyncEditorLoading=true when enabling the async feature.

- grid.editActiveCell([Slick.Editor]) API now returns boolean FALSE whenever the editor could not be started and will return the (activated) editor instance (a truthy value) on success
- revert this edit done in the last commit: "test an experimental 'position:absolute' approach for the top header row... we know this is hairy..." -- it's back to the original behaviour for the reason described in this source comment:

> As the column **header** cells have a 'resize' ability (options.resizable), those
> header cells cannot use the `position: absolute` + `.l<N> .r<N>` styling that all
> other cells in the grid (including 'headerRow cells' -- option.showHeaderRow) use
> as the resize (drag) operation would then require a lot of continuous style
> recalculations to show the resize action as 'smooth': it would load the dragmove
> handler overmuch (options.syncColumnCellResize).

(Besides the 'position:absolute' approach completely nukes the UI experience for dragging column headers for re-ordering columns in the grid.)

- fixed a typo in the comments

- moved the 'clear log' button in the examples/example-focus-and-commit-on-blur.html to the right and out of the way.
example-multi-column-sort.html: better explain how to select the multiple columns for sorting (SHIFT key + mouseclick)
'mouse' is not a legal droppable mode.
minimal edit: unused assignment
unused event handler call parameters
- example: fixed dragging to the recycle bin (turned out to be a bug in threedubmedia's event.drop)

- example: showing the use of several drop targets ≈ multiple choices (all functioning as 'recycle bins') to drop the dragged row(s) proxy and have these rows deleted.
- Slick.Editors .getValue() and .setValue() APIs are obsolete and removed: the only example using those duplicates of .serializeValue and .loadValue was the examples/example-spreadsheet.html which has been fixed accordingly. .getValue() has been removed while .setValue() has been renamed to .setDirectValue() as it differs slightly from .loadValue as the latter accesses the data item associated with the cell rather than receiving the value to display from the caller.

- Slick.Editors APIs have been synchronized: all editors now offer the same interface, which includes .setDirectValue(), .loadValue() and .serializeValue()

- Slick.Editors unification under way...
- fixed crash due to the new .focusout handler producing nested editor commit actions: we now reset `currentEditor` variable very early as any node.destroy() can trigger additional focusout events which will trigger a commit: only by immediately resetting the global and keeping the 'old' value locally for further processing can we prevent nested invocations of this code (and consequent crashes in jQuery).

- added focus and focus handlers for the entire grid surface. EXPERIMENTAL

- consistent event parameters for all: onColumnsReordered should match onColumnsReordering and onColumnsStartReorder; now it does

- pass the original event info to the onColumnsResizing / onColumnsResized / onColumnsStartResize event subscribers