Add compositor surface

This PR adds a preliminary implementation for the `wl_surface` interface.
Can you indent this to be on the same column as the first argument.