code: function Value (val, parent, opts) {
    var obj = Object.create(Value.prototype)
    opts = opts || {}
    obj.value = val
    obj.parent = parent
    obj.type = getType(val)
    obj.key = opts.key
    obj.length = opts.length !== undefined ? opts.length : (val && val.length)
    return obj
  }
docs: Value wrapper to contain state.
  
  @param {*} val Value to wrap
  @param {Value|null} parent Parent value
  @param {object} [opts] Options
  @param {string|number} [opts.key] Key/index if value is contained in an object/array
  @param {number} [opts.length] Length if value is an object/array
  @return {Value}