startsSpecial = encodedStr => {
  if (encodedStr === '') {
    return false;
  }
  // charCodeAt(0) and number compare is a bit faster.
  const code = encodedStr.charCodeAt(0);
  // eslint-disable-next-line yoda
  return BANG <= code && code <= DASH;
}
An `encodeToSmallcaps` function takes a passable and returns a
JSON-representable object (i.e., round-tripping it through
`JSON.stringify` and `JSON.parse` with no replacers or revivers
returns an equivalent structure except for object identity).
We call this representation a Smallcaps Encoding.

A `decodeFromSmallcaps` function takes as argument what it
*assumes* is the result of a plain `JSON.parse` with no resolver. It then
must validate that it is a valid Smallcaps Encoding, and if it is,
return a corresponding passable.

Smallcaps considers the characters between `!` (ascii code 33, BANG)
and `-` (ascii code 45, DASH) to be special prefixes allowing
representation of JSON-incompatible data using strings.
These characters, in order, are `!"#$%&'()*+,-`
Of these, smallcaps currently uses the following:

 * `!` - escaped string
 * `+` - non-negative bigint
 * `-` - negative bigint
 * `#` - manifest constant
 * `%` - symbol
 * `$` - remotable
 * `&` - promise

All other special characters (`"'()*,`) are reserved for future use.

The manifest constants that smallcaps currently uses for values:
 * `#undefined`
 * `#NaN`
 * `#Infinity`
 * `#-Infinity`

and for property names analogous to capdata @qclass:
 * `#tag`
 * `#error`

All other encoded strings beginning with `#` are reserved for
future use.

@param {string} encodedStr
@returns {boolean}