Implement GAP kernel APIs for copying objects.

In particular, ShallowCopy and StructuralCopy now should work.
Simplify _SI_FreeFunc by using sleftv::CleanUp()
Ensure currRing is set when copying sleftvs
Cleanup libsing.h
Add IsCopyableSingularType

Since IsCopyableObjSingular only depends on the type, it makes sense
to factor out the code checking the type into a separate function
(the new IsCopyableSingularType), so we can more easily use it from
other places.
Simplify gapwrap() using IsCopyableSingularType

As an added benefit, this helps ensure that things stay consistent
across the different functions.