dynamic tab type resolution

set a tabTypeFetcher function on the provider to define how previously unregister tab types are resolved. Uses $q deferred promise to allow asynchronous behaviour.