decodebin2: fix pad leak and problem with GWeakRef code
Firstly, don't leak the sinkpad. g_weak_ref_get() returns a strong reference (unless it returns NULL), so that must be unrefed, as detected by the playbin-complex and discoverer unit tests.
Next, if we do that we get invalid memory access when the
final pad ref is dropped a few lines below after the
request pad is released (with the playbin-complex
test_raw_raw_audio_stream_adder_manual_sink test). The
reason for this is that GWeakRefs are not movable once they're in use, because
their address will be stored inside the object. In this
case the GWeakRef was embedded inside the GstDemuxerPad
struct which in turn was embedded inside the GArray data
section, and when the GArray gets resized, the structs
move. Just KISS and use a list with individual allocations
for each DemuxerPad instead.