Add OneOf Template and shorthands one for it and Choice

OneOf's shorthand is a list and Choice's one is a set.
OneOf differs from Choice because it's elements are considered as
templates and not values.

`OneOf([bool])` and `Choice([True, False])` are equilavents.
So are `OneOf([String(pattern='[A-Z]')])` and `Choice([chr(x) for x in
range(65, 91)])`