Unify signal handling with callback handling

Conceptually, signals are callbacks of type ScopeTypeNotify, so we do
not need to separate paths for marshaling arguments. Now signals are
treated as a particular type of callback, and all the marshalling is
common, and occurs on the Haskell side.