There was a race when going to PAUSED while pushing a buffer to the
pipeline process (where we weren't even cancelling anything).
This rework base all the cancellation around the GCancellable
"cancelled" signal trying to ensure that the streaming thread will not
block once a cancel operation happens.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2504>