Improved dynamic getter
Use NilHash class so that calling undefined methods doesn't blow up.

Previously, for example, if a song doesn't return a "disc" entry, then
response.disc would raise NoMethodError, while response["disc"] would
return nil. Now they'll both return nil. Unfortunately, so will calling
any "getter" method on the NilHash, but I think that's OK for how these
hashes are being used.