implement new fetch syntax

introduces a new fetch syntax for paths:

a) complete improvement / restructure
b) path wildcards are gone

```JSON
{
  "method": "fetch",
  "params": {
    "path": {
      "equals" : "foo",
      "equalsNot": "bar",
      "contains": "f",
      "containsNot": "x",
      "containsAllOf": ["f","o"],
      "containsOneOf": ["fo","oo"],
      "containsNoneOf": ["bar","bie"],
      "startsWith": "f",
      "endsWith": "o",
      "equalsOneOf": ["foo","bla"],
      "caseInsensitive": false
   },
   "value": { 
     "lessThan": <number>,
     "greaterThan": <number>,
     "contains": <string>,
     "isType": <string>,
     "equals": <any>,
     "equalsDeep": <object/array>,
     ...
   },
   "valueField": {
      "<fieldname>" : { 
        "lessThan": <number>,
        "greaterThan": <number>,
        "contains": <string>,
        "isType": <string>,
        "equals": <any>,
        "equalsDeep": <object/array>,
        ...
      },
      "<fieldname2>" : {
        ...
      }
   },
   "sort": {
     "byPath": <boolean>,
     "byValue":  <typestring>,
     "byValueField": {
       "<fieldname>": <typestring>
     },
     "descending": <boolean>,
     "from": <number>,
     "to": <number>
   },
   "select": "<fieldname>",
   "map": {
      "<fieldname1>": "<targetname1>",
      "<fieldname2>": "<targetname2>"
    },
   "id": "demoFetch"
  }
}
```

The "value" key is suitable for primitive types (number/string/bool).
The "valueField" requires the value to be a table or array and "<fieldname>" can be a string referring to the fieldname/s inside a table, e.g.:

"age"
"owner.age"
"owner.friends[0]"

full examples:

```Javascript

// JUST THE INTERESTING "PARAMS" FIELD

// fetch all persons with an age > 35
{
  path: {
    startsWith: "persons"
  },
  valueField: {
    age: {
      greaterThan: 35
    }
  }
}


// fetch all females with an age < 35
{
  path: {
    startsWith: "persons"
  },
  valueField: {
    age: {
      lessThan: 35
    },
    gender: {
      equals: "female"
    }
  }
}

// fetch all persons, but not the one with 2763537 in path
{
  path: {
    startsWith: "persons",
    containsNot: "2763537"
  }
}

// fetch all prime numbers < 10000
{
  path: {
    startsWith: "primes",
  },
  value: {
    lessThan: 10000 
  }
}

// fetch the top ten players online
{
  path: {
    startsWith: "players"
  },
  valueField: {
    status: {
      equals: "online"
    }
  },
  sort: {
    byValueField: {
      score: "number"
    },
    descending: true
  }
}
```