compositor: Shell popup implementation

Implement the popup protocol.

Also, remove surfaces from layers when unmapped.
We used to remove them when destroyed but at that time the surface is
already a null pointer meaning that we can't access the "role" window
property and determine from which layer the surface must be removed

Closes #109