Changes made to the DEBUG system.  New header file gstdebug.h holds the stuff to keep it out of gst.h's
hair.  DEBUG prints out the process id, cothread id, source filename and line number.  Two new macros
DEBUG_ENTER and DEBUG_LEAVE are used to show the entry and exit of a given function.  This eventually
might be used to construct call trace graphs, even taking cothreads into account.  This would be quite
useful in visualizing the scheduling mechanism.

Minor changes to various debug messages.

Also sitting in gstdebug.h is a prototypical DEBUG_ENTER that's capable of performing DEBUG_LEAVE
automatically.  It does this by utilizing a little-known GCC extension that allows one to call a
function with the same parameters as the current function.  The macro uses this to basically call
itself.  A boolean is used to ensure that when it calls itself it actually runs the body of the
function.  In the meantime it prints stuff out before and after the real function, as well as
constructing a debugging string.  This can be used eventually to provide call-wide data on the DEBUG
lines, instead of having to replicate data on each call to DEBUG.  More research is needed into how this
would most cleanly be fit into some other chunk of code, like GStreamer (I think of this DEBUG trick as
a separate project, sorta).

Unfortunately, the aforementioned DEBUG trick interacts quite poorly with cothreads.  Almost any time
it's used in a function that has anything remotely to do with a cothread context (as in, it runs in
one), a segfault results from the __builtin_apply call, which is the heart of the whole thing.  If
someone who really knows assembly could analyze the resulting code to see what's really going on, we
might find a way to fix either the macro or the cothreads (I'm thinking that there's something we missed
in constructing the cothreads themselves) so this works in all cases.

In the meantime, please insert both DEBUG_ENTER and DEBUG_LEAVE in your functions.  Be sure to put
DEBUG_ENTER after your variable declarations and before any functional code, not to put the function
name in any DEBUG strings (it's already there, trust me), and put a DEBUG_LEAVE if you care enough.

Changes are going to happen in the way DEBUGs and other printouts occur, so stay tuned.
