Add compositor wl shell

This PR adds a preliminary implementation of the `wl_shell`.
Maybe our architecture sucks if we need to pull in ">100 lines of header code" for just one type...

:laughing: