Crafts a navigator or from a hal-json link dict.

        If the link is relative, the returned navigator will have a
        uri that relative to this navigator's uri.

        If the link passed in is templated, a PartialNavigator will be
        returned instead.

def _navigator_or_thunk(self, link):
        '''Crafts a navigator or from a hal-json link dict.

        If the link is relative, the returned navigator will have a
        uri that relative to this navigator's uri.

        If the link passed in is templated, a PartialNavigator will be
        returned instead.
        '''
        # resolve relative uris against the current uri
        uri = urlparse.urljoin(self.uri, link['href'])
        link_obj = Link(uri=uri, properties=link)
        if link.get('templated'):
            # Can expand into a real HALNavigator
            return PartialNavigator(link_obj, core=self._core)
        else:
            return HALNavigator(link_obj, core=self._core)