function decode(str = '') {
  var tmp, k, out = {}, arr = str.split('&')
  while ((tmp = arr.shift())) {
    tmp = tmp.split('=')
    k = tmp.shift()
    if (isReserved(k)) break;
    if (out[k] !== void 0) {
      out[k] = [].concat(out[k], toValue(tmp.shift()))
    } else {
      out[k] = toValue(tmp.shift())
    }
  }
  return out
}
Returns an Object with decoded keys and values.
@param {String} str - The query string, without its leading ? character.
@returns {KeyValueObject}