Return errors instead of assuming transaction failure is always a cancel

I am not sure why github is confused about this pull request. 99% of the code it say's is different is identical. I only changed the `buyFeature:onComplete:onCancelled:` method to be `buyFeature:onComplete:onError`

This allows the developer to inspect the error to see if it was actually cancelled, or another error occurred.