1) transitions
--------------

There are four states, NULL, READY, PAUSED, PLAYING. state transitions only
happen from once neighbouring state to another.

NULL:  the element is just being created, the initial state.
  !
  !    the element creates all of its resources (a thread will create
  !      its pthread etc..)
  !    - most used by bins to set up thread context for its children
  v
READY: the element is ready to start processing.
  !
  !    the element sets up its state so it can start processing buffers.
  !    - open devices
  v
PAUSED: the element is paused
  !
  !    the element starts spinning
  !      
  v
PLAYING: the element is playing
  !
  !    the element stops spinning
  !    the element frees resources from other plugins (bufferpools)
  !
  v
PAUSED
  !    element removes caps from pads
  !    reset internal state
  !    - close devices
  !
  v
READY
  !
  !   the element frees all of its resources (eg: pthread_join)
  !
  v
NULL


2) bin transition
-----------------

the state of a bin is equal to the maximum state of its children.


3) interaction with the scheduler
---------------------------------

elements in the !PLAYING state are disabled in the scheduler.


4) action that can be performed by the app in the different states
------------------------------------------------------------------

PLAYING:  nothing, only iterate on the pipeline, some properties can
          be changed.

PAUSED:   elements can be connected, removed, disconnected. some
          properties can be changed

READY:    as in PAUSED but *all* properties can be changed.

NULL:     everything.
