Fix memory leak in ProtoTest

ProtoTest eats over 2GB memory when it runs all test cases:

![mem1](https://cloud.githubusercontent.com/assets/2600379/5214986/d90857d0-765d-11e4-9685-8b67c35ab7ee.png)

That is because ``ProtoCore.Core`` is used in every test case, and ``ProtoCore.Core`` instance is not properly cleaned up (more details: static instance ``CLRObjectMarshaler`` holds ``ProtoCore.Core`` instance until ``ProtoCore.Core`` instance sends out ``Dispose()`` event).

Here we are not going to restructure these static instances in the VM. For ``ProtoTest``, a quick fix is to add a basic class ``ProtoTestBase`` which will handle setting and cleaning work. Now all test classes inherit from this basic class. 

Now ProtoTest memory usage goes down to less than 300MB:

![2d](https://cloud.githubusercontent.com/assets/2600379/5215766/c4778716-7665-11e4-8354-802152338122.png)

Why do you need to call GC.Collect()?? generally we should not call GC.Collect, If you have some memory not yet ready for release but might get released after a while but because of explicit call to GC, it has moved to next generation and now most likely that it will never get released.