compositor: Remove application windows when the surface is destroyed

We keep track of the application windows so that the shell client can
handle them.

Remove application windows when their surface is destroyed.
compositor: Remove shell windows when destroyed

Remove shell windows from their layer upon destruction.
compositor: Implement key bindings

Register key bindings and trigger them as soon as a matching key press
event is received.

Closes #107