Implemented ValueStruct

A variation on Ruby's `OpenStruct` in which all fields are immutable and set at instantiation. For compatibility with `FinalStruct`, predicate methods exist for all potential fields and these predicates indicate if the field has been set. Calling a predicate method for a field that does not exist on the struct will return false.

Unlike `Record`, which returns a new class which can be used to create immutable objects, `ValueStruct` creates simple immutable objects.