Add Upgrade API

I'm putting this up now to get early feedback.  I am still working on testing, but the implementation is basically there.  I've also attempted to add docs (and modify optimize docs as necessary).

This branch does the following:
* Add the new API at the rest layer, being backed by the optimize API with upgrade flag, and segments api to find upgrade status.
* Add `upgrade` flag to optimize API, and deprecate `force` flag (will remove in master)

closes #7884
Well, even better than a pair would be allowing multiple return values.  But modern languages don't seem to understand that you can push more than one return value onto the stack...

"Exposing the fields with public methods" is what, IMO, makes average java code more complex than it needs to be.  By that, I don't mean encapsulation is bad (when it is useful), but simply that too many people follow a "rule" and encapsulate everything, not giving any thought to whether encapsulation is necessary.  Here, it is in a private inner class, which serves this extremely limited purpose.  But if it was public, I was still not use encapsulation, I would just make these final and use temps inside the constructor.

Sorry for the soapbox...