Create ValueObject to encapsulate comparison between value objects

This should DRY up value objects in the domain such that we don’t
have to hand code equality methods in them. Other checks can
be added later such as checking if ‘other’ is actually the same class.
Merge pull request #54 from relaxdiego/value_object

Create ValueObject to encapsulate comparison between value objects
Add test for comparing value objects containing array of value objects
Remove Itinerary#== and inherit ValueObject

The handcoded #== method is no longer necessary since ValueObject
is capable of comparing attributes that are array of Value Objects as
proven by rev 62ca9c56c7
Merge pull request #55 from relaxdiego/value_object

Remove Itinerary#== and inherit ValueObject
Merge pull request #56 from relaxdiego/enum

Initial commit for implementing Enum
Be conservative about what to add to $LOAD_PATH

The promiscuous loading of everything in the project dir
results in 10+ seconds execution time of all specs whereas
this version is just 2+ seconds.
Use Guard

This will eliminate the need to alt-tab between editor and terminal
just to run the tests and see the results.
Merge pull request #57 from relaxdiego/faster_specs

Modify how specs are executed to improve execution speed
Second attempt at implementing Enum

This implementation looks cleaner but the downside is that
using the EnumType::ElementName format to access elements
is dangerous because it will never raise an exception if the
name is misspelled since the same method that throws an
exception (const_missing) is used to create the pretty
enum DSL.