Mark and sweep - part 3

This pull request fixed test cases when compilation flag ``GC_MARK_AND_SWEEP`` is enabled. It also removed call site GC roots (and then there is a limitation that garbage collection won't work during a function call). 

Currently ProtoTest is green both with compilation flag ``GC_REFERENCE_COUNTING`` and ``GC_MARK_AND_SWEEP``. 

More details about mark and sweep GC could be refer to [this google document] (https://docs.google.com/a/adsk-oss.com/document/d/151suZwdM3hn-xo_AjOgrG8h7IlpvGKOy69qPw8Sd2qU/edit#). 

@junmendoza , please help to review the change. Thanks.
Yep, ``GCRetain()`` and ``GCRelease()`` internally call ``Heap.IncRefCount()`` and ``Heap.DecRefCount()`` which are all no-op if ``GC_MARK_AND_SWEEP`` is on.