Configuration manager - Load and Save conf files

A new dependency have been implemented : `ConfigurationManager`

You can register some global configurations, for example

```C++
auto config = engine->setInstance<ConfigurationManager>(File("MyConfigurationFile.conf"));
config->setConfiguration<glm::uvec2>("windowSize", glm::uvec2(800, 600), [&e](glm::uvec2 &&v)
{
e->getInstance<IRenderContext>()->setScreenSize(std::move(v));
});
```

In the example we pass a lambda function. Each time "windowSize" value changed the lambda is called (here, in the example, it will resize the window).

You don't have to pass a lambda if you don't want to.

`ConfigurationManager::saveToFile()` will save defined configurations, `ConfigurationManager::loadFile()` will load saved configurations, and * apply modification only on configurations which have been defined before * (`setConfiguration()`). If donfiguration in the file is not known by the program it'll be ignored.

I do not use CEREAL for this feature, it was not adapted. I used rapid json. But becarfull, il you want to register some conf of other types that uvec2 and int, you will have to register the save and load function in Utils/JsonSerializationBasicTypes.cpp, or in any .cpp you want.

Close #143