puzzles as Value, rather than Text, and use Either
puzzles as Value, rather than Text, and use Either

Bunched in one commit because not worth the trouble
to tear apart.

1. Don't pass in (String Text), instead a Value, to
be able to deal with non-text values also.

2. Use Either so we can give more useful error messages.

robx/puzzle-draw,robx/puzzle-draw