The basic unit of data transfer is the StreamBuffer, which holds the type
of data, flags, and metadata and data size/ptr pairs.  These will
eventually be allocated in mass groups from pools, which will be managed
as a group.  Typically, each channel might have its own pool, but these
will generally be managed by the top level abstraction.


Each instance of an element is described by a type derived from
StreamElement.  StreamElement includes a pointer to a function table that
is specific to that element type.

An element is created by first loading in the appropriate object.  This
will return a pointer to the StreamElementType structure created by the
object.  Instances of elements can be created from this struct.  Other
functions may be used to get a hold of the pads used in the 
