Revised. Much better use of closures, consistent (if manually managed) types for various tag derivers, better handling of error conditions.