implement tagged reflection.

Dear ekmett,

I started trying this library yesterday and found that the class `Given` is so cool! Then I wanted to share multiple states of the same type. Here's my solution for that.

I like the literal appearance of the code (it's almost readable English!) but point me any problems I did not recognize, either in the module or in the examples.