Refactor task handler binding

Instead of using a dictionary of handler mappings
use a dict[event] -> list of handler mappings, this
allows the same function/handler to be bound more than
once (which can be useful to do, depending on handler
specifications) and to allow for removal of these handlers
find the first match and remove it using the reflection
callback comparison routine.

Change-Id: Ied31dd893502ec91a48f7d2e1ef2cd4553a07f89
Use the six callback checker

Instead of using the collections isinstance
check use the one provided in the six
module that takes into account other ways to
detect callability.

Change-Id: I626338048a47cea75a29776cadca250e373d2cc7
Assert functor task revert/execute are callable

Use the six module to assert that the provided
execute and revert functors are callable to avoid
late failures that would occur later when trying
to execute.

Change-Id: I599f2ad4071babcd3a3e363261f3c8cd0dee49b8
Merge "Refactor task handler binding"
Merge "Assert functor task revert/execute are callable"
Merge "Use the six callback checker"