rows here should be a list of tuples:
         - (key, value) for reduce views
         - (key, value, id) for nonreduce views without include docs
         - (key, value, id, doc) for nonreduce with with include docs

def _parse_view_results(self, rows, factory, options):
        '''
        rows here should be a list of tuples:
         - (key, value) for reduce views
         - (key, value, id) for nonreduce views without include docs
         - (key, value, id, doc) for nonreduce with with include docs
        '''
        kwargs = dict()
        kwargs['reduced'] = factory.use_reduce and options.get('reduce', True)
        kwargs['include_docs'] = options.get('include_docs', False)
        # Lines below pass extra arguments to the parsing function if they
        # are expected. These arguments are bound method unserialize() and
        # unserialize_list(). They methods perform the magic of parsing and
        # upgrading if necessary the loaded documents.

        spec = inspect.getargspec(factory.parse_view_result)
        if 'unserialize' in spec.args:
            kwargs['unserialize'] = self.unserialize_document
        if 'unserialize_list' in spec.args:
            kwargs['unserialize_list'] = self.unserialize_list_of_documents
        return factory.parse_view_result(rows, **kwargs)