Currently, when an element wants to push or pull, they call gst_pad_*.  These functions then decide what
to do based on the selection of pointers in the pad.  There are at least 2 options for each, plus some
header stuff to do various checking of flags.  Unfortunately, because of the selection of pointers in
the pad, there is at least one case where scheduling has to be tricked, by providing a pointer to a
function with no body.

What I propose is that these functions be replaced with macros that call a function pointer directly.
The default functions (provided by GstPad) would be capable of chaining, that's about it.  When a
schedule is formed, these get replaced with more specific functions, provided by GstBin or a subclass.

In the chain case, the pad_push_func might even be replaced brute force with the chain function, since
they have the same prototype.  In the cothreaded case, various functions would provide the ability to
switch, deal with bufpens, etc.
