add a test to excercise inter-thread locking

move source filter from forks.pm to forks::shared.pm, although I doubt that
there will be many cases where forks would only be used.

push with a shared scalar bombs:
 push( @shared,$shared );    # bombs
 push( @shared,$shared.'' ); # works
Haven't got a clue why.

optimizations:
- Storable::freeze/thaw not always needed: check Thread::Serialize
- change remote function names to command numbers: less traffic, no Storable?
- allow for unix domain sockets as transport medium
- allow for shared memory as transport medium (how will we fix blocking?)

Global destruction sometimes causes strange errors when threads are still
running.  Need a way to check for that.

Signalling unlocked variables should become possible.  Maybe lock() the
variable before signalling?  Probably not.  Simply taking away the check for
the lock causes a deadlock at the moment, so that doesn't make much sense.
