[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.
And yes, I know that `_new()` methods shouldn't return `NULL` as `*alloc()` never should.. but you can't be safe...