Improve on intent.extra support using monad ops and use a value class.

Switching to Option.flatMap avoids all the checks for Some/None.
 The value class avoids allocation overhead of Extra objects through desugaring, since there's no member data.
 While here, implement the rest of the extra data types.
Merge pull request #93 from tvierling/intent-extra-cleanup

 Improve on intent.extra support using monad ops and use a value class.