Add a helper: argumentIndex

Returns the zero-based index into the formal argument list of the given Argument
Add a new abstraction for converting from Value to more concrete types.

The abstraction is a typeclass with one method:

> class FromValue a where
>   fromValue :: (Monad m) => Value -> m a

The monad constraint allows this to be easily used in both Maybe and
MaybeT contexts (as well as some other sensible Error-type monads).
It could be used in IO, but a non-match calls fail so that might not
be a great idea.

The idea is that the return type is polymorphic based on how it is
used.  This should probably always be unambiguous or you wouldn't be
casting anyway.
Switch the FromValue class to use Failure instead of an arbitrary Monad.

This makes the failure semantics clearer (and covers the primary
Maybe/MaybeT cases).  Now it is clear that in IO this will raise an
Exception, and additionally covers Either/EitherT nicely.  It is also
easier to extend.