Fix broken Hashie::Hash#to_hash

Per [my comment on the original pull request for this feature](https://github.com/intridea/hashie/pull/85#issuecomment-34896211):

> I'm running into an issue with this code.  I'm trying to take a basic hash with string keys and convert it to a basic hash with symbol keys.  Take the following example.
> 
> ```
> hash = {"id": 1, "name": "Bob"}
> hash = Hashie::Hash[hash].to_hash(symbolize_keys: true)
> ```
> 
> This throws an exception in Hashie's to_hash method using the code provided here.  The reason is that on line 15 the value of `k` is being changed from `"id"` or `"name"` to `:id` or `:name` respectively.  Then on line 17, the call to `self[k]` returns `nil` since `hash[:id]` is not defined (only `hash["id"]` is defined), which then errors when trying to evaluate `nil.each`.
> 
> I think a proper fix would be to assign the key to a NEW variable instead.  e.g.:
> 
> ```
> assignment_key = options[:symbolize_keys] ? k.to_sym : k.to_s
> out[assignment_key] ||= []
> self[k].each do |array_object|
>   out[assignment_key] << (Hash === array_object ? array_object.to_hash : array_object)
> end
> ```

Additionally, this fixes a similar issue even when `:symbolize_keys` is false (or not provided) to the `#to_hash` function.  If a key is not already a string, then a similar error will be raised.  There was not a test to cover this, so I added one.