Add Struct#[] and Struct#to_hash

Struct#[] takes any number of arguments and looks up struct values by field
number, name (string or symbol) or integer range (returns array of values for
each field number). A value or nil is always returned for every key requested.

Struct#to_hash returns a hash keyed by field names as symbols. Only key-value
pairs are returned that have a non-nil value.