Use "\siunitx_units_" as the prefix for 'public' functions

While viewing this code as a stand-alone module is a long-term goal, at
this stage everything should be part of `siunitx`. At the same time,
these are not internal functions so remove that mark up.
Define various 'special' symbolic unit commands

This creates the non-standard commands, all of which are 'internal' to
the parser and so need to be set up here (not outside of the parser
block).

At the moment, `\cancel` might not be quite right: using the same name
twice might need some checks to avoid an infinite loop. That can get
tested properly later on.
A token list for building up the formatted result
Add a routine to do formatting of literal units

As it stands, this approach differs from that in v2 in that it assumes
that any symbolic units present are `x`-type expandable. This is
required so that a formatted token list can be returned outside of
the group that the parser will be contained within.

Notice that this uses the LaTeX2e-dependent `\protected@edef` as
explained in the comments.

This requires one general option be defined: the product separator
between units. At present this is stored in a sub-tree of the
main `siunitx` keys tree, although the name is unchanged from v2. The
plan here is to separate out the keys, again so that in the future
the various parts can be converted into independent modules. Later a
key mapping will be required.
Add one expl3 variant

Open question: should these be documented?
Don't wrap variants from 'other places' in the macro environment

As discussed today on LaTeX-L, this is conceptually not 'part' of
the current module.