additional watcher functionaliy:

cache location so we get an immediate response if previously cached
cache uses angular-local-storage module

custom name for location event broadcast
name is passed in via options.name to watchPosition

filter watchPosition events to those with significant location change
distance filter is passed to watchPosition via options.distance

watch key is passed back to deferred so multiple watchers may exist
per application. watch key is passed to watchPosition via
the options.name parameter