Create internal windowing template library
We move out common functionality from our extensive windows hierarchy into a new namespace KWin::win
in the form of function templates.
While at it we also replace some unscoped enums from our windows classes with proper enum classes (in the new namespace). For flags we use a template approach with SFINAE based on this article.
There is still more common functionality in the windows classes that can be moved, but this can be done in the future with more MRs.
Closes #92 (closed)