'Apply ``func`` on all records in ``self``, and return the result as a
list or a recordset (if ``func`` return recordsets). In the latter
case, the order of the returned recordset is arbitrary.
:param func: a function or a dot-separated sequence of field names
(string); any falsy value simply returns the recordset ``self``'

def mapped(self, func):

    if (not func):
        return self
    if isinstance(func, basestring):
        recs = self
        for name in func.split('.'):
            recs = recs._mapped_func(operator.itemgetter(name))
        return recs
    else:
        return self._mapped_func(func)
