Add deletion framework for file descriptors
When shadow_fd structs _that are owned by known protocol objects_ have their reference count drop to zero, they are deleted. Newly created shadow_fd's begin with a reference count of 1, which is reduced when the translated fd to sent to the display/application/other waypipe socket end. This ensures that the object is not deleted early, even if the compositor e.g. wl_display.delete_id's the fd owning object before receiving it.