next now returns a pointer.

Numerous additional implementation changes to support this:
Generator uses a boost::variant rather than a boost::optional
yield now accepts a pointer argument