Aggregate exceptions
Redesign to support GHC-style vtables

In writing validation functions and vtable-calling
functions, I realized:

1. There is a lack of safety (e.g. comparing two Questions
   of different types), and
2. There is a lot of boilerplate translating vtable chasing
   to comfortable C function calls.

Using explicit dictionaries (like how the Glasgow Haskell
Compiler (GHC) implements runtime type polymorphism
(typeclasses) internally).  It very easily solves (1) (as
much as you can in C, anyway), and happens to solve (2) very
simply too.

The approach is to write:

    vtable->fn(a, b)

instead of:

    if (a->vtable != b->vtable) error();
    a->vtable->fn(a, b)

where vtable is passed as a parameter.