[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.
Would it be faster to do the `wl_list_remove()` and `free()`  calls in a second iteration, to get the best speed out of the event callback calling loop? (I don't know whether this is micro-optimization,... but maybe it is worth it...?)