docs: def hasKey(self, key, notNone=False):
          '''Return entries where the key is present.
  
          Example of use:
  
          >>> test = [
          ...    {"name": "Jim",   "age": 18, "income": 93000, "wigs": 68       },
          ...    {"name": "Larry", "age": 18,                  "wigs": [3, 2, 9]},
          ...    {"name": "Joe",   "age": 20, "income": None , "wigs": [1, 2, 3]},
          ...    {"name": "Bill",  "age": 19, "income": 29000                   },
          ... ]
          >>> print PLOD(test).hasKey("income").returnString()
          [
              {age: 18, income: 93000, name: 'Jim' , wigs:        68},
              {age: 20, income: None , name: 'Joe' , wigs: [1, 2, 3]},
              {age: 19, income: 29000, name: 'Bill', wigs: None     }
          ]
          >>> print PLOD(test).hasKey("income", notNone=True).returnString()
          [
              {age: 18, income: 93000, name: 'Jim' , wigs:   68},
              {age: 19, income: 29000, name: 'Bill', wigs: None}
          ]
          
          .. versionadded:: 0.1.2
          
          :param key:
             The dictionary key (or cascading list of keys) to locate.
          :param notNone:
             If True, then None is the equivalent of a missing key. Otherwise, a key
             with a value of None is NOT considered missing.
          :returns: self
          '''
          result = []
          result_tracker = []
  
          for counter, row in enumerate(self.table):
              (target, _, value) = internal.dict_crawl(row, key)
              if target:
                  if notNone==False or not value is None:
                      result.append(row)
                      result_tracker.append(self.index_track[counter])
          self.table = result
          self.index_track = result_tracker
          return self