Reordered methods so that all public methods come first, then all protected methods then all private methods.

Also some minor whitespace diffs.
Refactored Provider::make to be a bit easier to understand.