make most GC functions nothrow

This improves performance for a simple GC.malloc/free pair in a loop by about 12% on Win32, and about 3% for Win64 (on my i7-2670QM).

I added error throwing lock/unlock functions to Mutex, because it doesn't make sense to allocate an exception inside the GC, it will cause infinite recursion on the same lock.

Unfortunately, scope(exit) still generates horrible code if the enclosed code is nothrow, so I had to replace them with the linear sequence.