Window Component System

- Allows to construct, update and destruct components based on a common
interface (examples: application, menu)
- Mutex locking while handling components
- Usage of unique_ptrs to be safe from memory leaks