Add routes to the routing dictionary

        :param origins: a number of origins to register
        :type origins: :py:class:`str` or iterable of :py:class:`str` or None
        :param destination: where the origins should point to
        :type destination: :py:class:`str`

        Routing dictionary takes the following form::

            {'node_a': set(['node_b', 'node_c']),
             'node_b': set(['node_d'])}

def register_route(self, origins, destination):
        '''
        Add routes to the routing dictionary

        :param origins: a number of origins to register
        :type origins: :py:class:`str` or iterable of :py:class:`str` or None
        :param destination: where the origins should point to
        :type destination: :py:class:`str`

        Routing dictionary takes the following form::

            {'node_a': set(['node_b', 'node_c']),
             'node_b': set(['node_d'])}

        '''
        self.names.add(destination)
        self.logger.debug('added "%s" to names', destination)

        origins = origins or []  # remove None
        if not isinstance(origins, list):
            origins = [origins]

        self.regexes.setdefault(destination, [re.compile(origin) for origin in origins])

        self.regenerate_routes()
        return self.regexes[destination]