Made api more Ruby-like and fixed some bugs.

These are some changes that I made a while back. I thought the api was maintained by shopstyle, so I submitted the PR to the wrong fork. Here it is again.
The method signature changed,s o client code would have to be updated. I think it would be rather confusing to return nil. If you prefer to maintain BC, you could change it to:
```
opts = {:search => opts} if opts.kind_of? String
```