ComponentTypeManager initialization

Regarding #53 
This optional initialization is supposed to solve multi-world multithreading issue. An app with a single world running on a single thread does not need this kind of initialization.

The intention is to call `ComponentTypeManager.Initialize` method once at startup, prior to creating any *EntityWorld* in any thread.

Example usage:
```csharp
// Scans all the app assemblies for the Component types
ComponentTypeManager.Initialize();
```


```csharp
// Initializes using the Types specified
ComponentTypeManager.Initialize(new List<Type>
{
	typeof(TestBaseComponent),
	typeof(TestHealthComponent),
	typeof(TestPowerComponent),
	typeof(TestPowerComponentPoolable),
	typeof(IComponent), // should be filtered out
	typeof(ComponentPoolable), // should be filtered out
	typeof(TestDerivedComponent), // should be filtered out
});
```

Warning
-----------
The new code in ComponentTypeManager has been tested only in FULLDOTNET environment. METRO-functionality regarding Reflection needs review.