when connecting signals, allow multiple user_args

This additionally deprecates the existing (single) user_arg arguments in
favor of the new user_args argument. Also note that the user_args are
added at the start of the argument list, while the old user_arg was
appended to the end.
allow passing "weak arguments" to signal callbacks

This means that the arguments are passed just like the existing
user_args, but they are stored as weak references to prevent a callback
from keeping its user_args alive. The emit code transparently
dereferences the arguments before passing them to the callback.

If any of the arguments are cleaned up, the callback is no longer called
(it's not actually automatically removed from the list yet, but it will
be).
store signal handlers using a dict instead of a list

This allows removing a signal handler using an arbitrary key, instead of
requiring to know the callback and all user arguments. This is needed to
support automatically disconnecting signal handlers when any of the
weakreferenced arguments are garbage collected.
use weakref callbacks to automatically disconnect signals

When any of the weakref arguments to a signal handler are garbage
collected, the signal handler is disconnect (since calling it no longer
make sense without all the arguments).
do not use the empty list as default argument value

Since default arguments are only evaluated once, this could cause
unexpected behaviour when the default list is modified in place. This
doesn't happen in the current code, but using None instead of [] as the
default value should prevent any future problems.
Merge pull request #14 from matthijskooijman/weak

Weak signal handler arguments and better support for (strongly referenced) lists of arguments