Replaced add_indifferent_access with stringify

This is a fix for #96

Previously, add_indifferent_access would modify the data and schema
hashes in place, to make them accept strings or hashes as keys. However,
there are two problems with this:

1. It works for accessing the hash (eg. fetch or []) but it does not
work if we use .has_key? or .keys
2. It does not convert arrays of symbols into arrays of strings (which
can be a problem when the symbols in the array refer to attributes, eg.
required)

To resolve this, I've removed add_indifferent_access in favour of
stringify, which returns a new copy of the hash, with all symbols
converted to strings. This is probably a better approximation of json
anyway, but it also makes accessing values from the hash easier, because
we always know that we'll be dealing with strings (not symbols).
Removed rogue puts statement
Moved the code to clear the cache into an ensure block

Removes the duplication
Removed monkey patching of Hash#default_proc

No longer used, because we use stringify instead of add_indifferent_access
Made insert_default supplement the original data structure with any new
values added during validation, rather than replacing completely

This is a fix so that the existing behaviour of insert_default is
maintained (ie. anything that is already in the object is left as it
was), but still allowing us to use a stringified hash internally and not
modifyingt the default proc of the data object.
Merge pull request #142 from iainbeeston/better_handling_of_symbols

Replaced #add_indifferent_access with #stringify