Application is now an interface

Application is now an interface with default implementations.
Project is now expected to provide function with following signature:
Application* createApplication()
It is an "entry point" similar to C/C++'s main function and
corresponding functions/methods in other programming languages.
Returned object is assumed to be dynamically allocated and its ownership
is being taken over by a std::unique_ptr in main.cpp.

RenderDevice provides few wrappers for OpenGL, more to come.