Add optional value parsers to field scopes.

Field scopes now take an optional parser in the form of a callable (e.g.
proc or lambda). When passing search values to the scope, the values
will be passed to the parser so that custom conversions can be done. If
no parser is specified, the value is simply returned.
Make the scope optional when defining field scopes.

The scope name is now optional when defining field scopes. If no scope
name is specified, the field name the scope will be the field name
prefixed with `by_` (e.g. when the field is :guid, the scope will be
:by_guid).