Remove hack for overriding Singular functions with operations

Instead of using MakeReadWriteGVar to rename a global var bound using
BindGlobal, the code generating the high level mappings now knows about
which names (i.e. constructors) to treat differently, and emits code
that uses the right names from the start. Also, these names now are
prefixed with _SI instead of SI to hide them from tab completion (where
they potentially confused users)
Move ring specific GAP code to new files lib/types/ring.{gi,gd}
Move proxy and interpreter specific GAP code to separate files