docs: function(map, key, row){
          var k, v, p, i, len = key.length, last = len - 1, m = map;
          for (i = 0; i < len; i++){
              k = key[i]; //get the keypart
              v = row[k]; //get the value for the key part
              p = m[v];   //get the property from the map for this keypart.
              if (p) {
                  if (i === last) {   //last, we need to store the row now.
                      if (_isArr(p)) p.push(row); //already entries here, append
                      else m[v] = [p, row]; //single row store here. since we need multiple rows, add an array
                  }
                  else m = p;
              }
              else                        //property didnt exist for this key yet.
              if (i === last) m[v] = row; //last keypart: store the row here
              else m = m[v] = {};         //more keyparts to go: add a new map for this keypart
          }
      }