specs for issue #319 (optional groups)
possible implementation for #319

Might be better to go with `optional_group(element)` than `group(element, required: false)`?
refactor
use optional_group(e) rather than group(e, optional: true)

feels a little clearer.
update CHANGELOG and README
initialize ParamsScope with a hash of options
remove ParamsScope#optional_group, and instead allow #requires and #optional to take blocks
update CHANGELOG and README
Merge intridea:master
slight refactor
Merged #443.