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
Merge "Refactor task handler binding"