Block-based authentication challenge API

This pull request changes our authentication API to be block-based like `NSURLSession`. I think since our API isn't completely frozen yet, this is the way to go. Should result in less code overall, and is more flexible.

How do you feel about it @MrNoodle?