Scheme for tight encodings of general integers
----------------------------------------------

abc... are chars in the range 33..122 representing base 90 digits;
multi-digit numbers are written as least significant -> most significant

a: a-44 (covers -44..45)

~a: a-89 if a <= 44 (covers -89..-45)
    a+1  if a >= 45 (covers 46..90)

|ab: ab-4139 if ab <= 4049 (covers -4139..-90)
     ab-3959 if ab >= 4050 (covers 91..4140)

}abc: abc-368639 if abc <= 364499 (covers -368639..-4140)
      abc-360359 if abc >= 364500 (covers 4141..368640)

{Sabc..}:  45*(abc..)+S+368640 if S <= 44 (covers 368641..)
          -45*(abc..)-S-368595 if S >= 45 (covers ..-368640)

{} -> infinity

NOTE: {!} is unused; here ! represents the digit 0

Supported types: (signed/unsigned) (int/long/long long), Integer/LargeInteger



Scheme for tight encodings of indices (integers >= -1)
------------------------------------------------------

abc... are chars in the range 33..122 representing base 90 digits;
multi-digit numbers are written as least significant -> most significant

a: a-1 (covers -1..88)

~a: a+89 (covers 89..178)

|ab: ab+179 (covers 179..8278)

}abc: abc+8279 (covers 8279..737278)

{abc..}: (abc..)+737279 (covers 737279..)

{} -> reserved for infinity, in case we later support LargeInteger

NOTE: 737279 is encoded as {!}, not {}; that is, we write a zero digit.
      The encoding {} is reserved for infinity in case we wish to support
      the LargeInteger type in the future.

Supported types: size_t, ssize_t
