Optional monitors

This PR introduces optional monitors feature.
The whole idea is that Object doesn't contain __monitor field anymore.
TypeInfo_Class will hold a monitor offset, if a class has one (by marking class declaration with @monitor attribute), or -1.
Monitor lookup is done with a hash map, if monitorOffset is -1.
The hash map is protected by a primitive RW spin lock.
Monitor finalization will only lookup for monitors, if a monitor was allocated at least once for the type of object being finalized.

If user wants to synchronize over some class, then he will probably want to add a __monitor field to it to gain performance bonus (no hash lookup will occur).

DMD counterpart: https://github.com/D-Programming-Language/dmd/pull/3547
discussion: http://forum.dlang.org/thread/xpliectmvwrwthamquke@forum.dlang.org
Looks like `monitorOffset` can never be 0 because that's where the vtable is.
Therefor use `0` to detect unallocated monitors so we can put the class initializer into bss.