[WIP] Add shell compositing

This Pull Requests adds a few missing abstraction layers between a surface, its shell, a monitor and the buffers below it.

This is basically all just one feature, make compositing easy.
What about unsigned types here? Maybe even the `uint_fastN_t` types, ... don't know which one you need, but I guess `16` is enough, isn't it?