[WARNING: BREAKING RENAMES] HandlerManager: implement some container and mapping behaviors

add_handlers() and remove_handlers() have been renamed to add() and remove(). What else could you possibly want to add to an object of a class called /Handler/Manager?

New methods:
__repr__(): return a string that's /almost/ usable as a Python expression. Unfortunately, functions don't repr() well, so this doesn't quite work.
__str__(): since we potentially have a plotload of Handlers, don't just call repr(). Rather, use the default object stringification (i.e. object.__repr__(), which really should be object.__str__() >.> ).
__len__(): return a count of all stored Handlers.
__iter__(): iterate over all stored Handlers. I don't think this is guaranteed, but it seems to me it should be in arbitrary event order, then in order of priority (given that add() sorts the Handler lists).
clear(): remove all Handlers (i.e. call clear() on the underlying dict)

Because of __len__(), HandlerManagers now have implicit boolean meanings. Empty HandlerManagers (len(self) == 0) are False; others (len(self) > 0) are True.
We also get use of the `in` and `not in` operators from __iter__() .

__init__() now accepts any number of Handlers as positional arguments. They will be add()ed at the end of initialization.

Oh, and: (minor things)
Handler.__str__() now calls repr(self), in a better reflection of what the docs says __repr__() and __str__() are supposed to be.