Add submission/success/failure functions.

Until now, onSubmission, onSuccess, and onFailure all had
to take HLists and deconstruct them. We now support taking
a function with the appropriate number of parameters instead
of an HList. For forms with more than 22 fields, we degrade
to only supporting HLists, as >22-arity functions cannot be
represented in the type system.

Additionally, function parameter types are checked and
inferred just like HList types, so you don’t have to annotate
your callback function if you don’t want to, and you’ll find out
if you try to pass a function with mismatching argument
types.

All of this is implemented via macros, and the process of
going from a basic form to a formalized form with handlers
is a bit more complicated than it should be at the moment.
Hopefully some simplification is to come.
Update simple chat example with new callbacks.
Update README to reflect new callbacks.