Dynamic pads are pads that are created while the element is playing.
This means that the element will create a new pas depending on the 
media type it is handling. For example, the mpeg1pdemuxer element will
create one or more video pads and one or more audio pads depending
on the number of elementtary streams found in the media stream.

The element will present its dynamic pads with the padtemplate list
attached to the elementfactory. both the MIME type, direction, presence
and properties of a pad can be obtained from the elementfactory using 
the padtemplates. 

Dynamic pad usually have the presence indicator set to 
GST_PAD_SOMETIMES. This indicated that the pad might become
available at runtime. When the pad is actually created in the 
element, the element will signal the new_pad signal. This signal can
then be used to attach a desired (compatible) element to the 
pad.

For certain elements, like a tee and a muxer, we need another pad 
presence flag: GST_PAD_REQUEST. With this flag, the 
elementfactory will announce that some of the pads are available on
request. For the tee element, for example, one might obtain a new output
pad by looking up a suitable padtemplate (temp) and performing:
gst_element_request_new_pad (element, temp). The element will then
create a new pad from the template (sink or source) and will return
a handle to it. You can then connect elements to this new pad.

The muxer element (an avi encoder, for example) might expose several
padtemplates for audio and video. The typical usage pattern for the
muxer would then be: create a compressor element (JPEG). Get the
src pad of the compressor, Request a new pad from the element using the
padtemplate provided by the compressor src pad and connect the 
compressor element to this pad.

An element that can be requested for a new pad has to implement the
gst_element_request_new_pad method and perform the nessesary steps 
to create a pad from that template. 

This interesting behaviour can be extended to ghostpads too. A 
compound element (a bin with internal elements) will also expose some
padtemplates, either from the internal elements or from itself. Along
with a new GstGhostPad class, this  also solves the naming conflicts 
we might have with the ghostpads. The compound element will override
the request_new_pad function and figure out which element it needs
to get a pad from.

Related to this solution: we will move the tee element to the
gst/elements/ directory because there is no point in having the 
header files anymore. The new pad request API will become a feature 
of gstelement so gsttee becomes a real element too.
