Some improvements to Shash

I sometimes want to turn a shash back into a hash, now its possible!

If you do this:
```ruby
my_shash = {a: 1, b: 2}
my_shash.each do |k, v|
  raise NoMethodError
end
```
The NoMethodError will be swallowed in the method_missing of shash. This pull request solves this by using #respond_to? instead of a rescue NoMethodError.

This along with other changes may be worth a version bump.