an interface to map between string s and id s
a note on atoms:
Atoms are abbreviations for strings.
When a string gets registered, it is assigned a numeric id
so that said string can always be referred to by this id.
This way strings have to be transported only once over remote connections.
Valid ids are (in this implementation) non zero, signed 32 bit values.
An atom of 0 means that the string in question is not registered
Additionally there is the abstraction of atom class:
Atoms are grouped into classes, so that an id can be assigned
to multiple strings, depending on the class context. The main
advantage of this is that atoms in one class may be kept
to small numbers, so that bandwidth can be reduced by sending
the atoms only as 16 bit values. Note that it is up to the user in this
case to handle overflows.