Don't hardcode references to libstcd++

In the past we wrongly used the C linker so we ended up with these
libraries explicitly linked. We now properly link C++ code with CXX.
This means we don't need to explicitly link the C++ standard library.

This also fixes issues with FreeBSD which has switch to clang / libc++
as the default instead of libstdc++.

Also see #2900
Also check if we're on OS X for leopard compatibility
Ensure to only return object in saw_object if object moved

This makes sure we don't accidentally write back objects into slots.
This caused an issue in the concurrent gc, where we would read an object
like @owner in Mutex and write it back afterwards in saw_object.

This last write would overwrite the fact that the object already
unlocked and @owner should be nil. Since we know that the concurrent gc
doesn't move object, we don't have to write back these objects. We
enforce this API by making sure saw_object only returns an object if it
either was forwarded or moved.

Fixes #2894, #2628, #2811