fix(uiGridCell): Use promises for tmpl processing

Issue #1712 demonstrates a race condition where a column's
compiledElementFn is attempted to be called before the cellTemplate is
present, e.g. in the case of a template fetched over the network. This
causes the function to not be present and an exception to be thrown.

This changes fixes this by added a getCompiledElementFn() method to
GridColumn, which returns a promise that is created in the
defaultColumnBuilder(). It gets resolved in
Grid.preCompileCellTemplates(). uiGridCell now uses this promise if the
function is not present at pre-link time.

Added tests for getCompiledElementFn() and getCellTemplate()

Fixes #1712