Azure API refactor

See commit messages for description of changes.
This is a breaking change and will require a minor version bump.

cc @indexzero @stammen