code: def filter(self, func=None, **query):
          
          if callable(func):
              result = filter(func, self)
              result.insert(0, self.default_columns)
              return TableFu(result, **self.options)
          else:
              result = self
              for column, value in query.items():
                  result = result.filter(lambda r: r[column] == value)
              return result
docs: Tables can be filtered in one of two ways:
           - Simple keyword arguments return rows where values match *exactly*
           - Pass in a function and return rows where that function evaluates to True
          
          In either case, a new TableFu instance is returned