add -Wl,-z,defs to linker flags: This will print errors whenever we miss to add dependencies to shared library targets
add -Wreturn-type to compiler flags: This will give us an error whenever a function does not return proberly or is declared with a implicit return type.
convert core::OSInformation to a singleton pattern, but still make it exchangable on a OS based level
use #pragma once insteaf of include guard: This makes include guards obsolote. Allthough it isn't part of the standard, every compiler somebody wants to use with GK supports it. It also gives huge compile speed ups for some compilers. Also less code and easier to use.
this basically changes the following things: