Add compositor wl shell

This PR adds a preliminary implementation of the `wl_shell`.
Maybe to you it sounds like a bad practice, but there's absolutely _no point_ in pulling in >100 lines of header code if you really only need a struct declration you can use for a pointer.
Also, it prevents you from e.g. accidentally declaring functions taking structs as parameters, fucking up the interface.