Rebase of #7786 against 3.0.0-rc.1.wip

This was hell to rebase, due to someone reformatting `package.json` at some point, and due to old, unrelated `3.0.0-wip` changes being mixed in somehow.
After `diff`-ing like crazy to double-check it, this rebase *seems* to have gone okay, except for `package.json`, which I just manually re-clobbered with the one from #7786 and manually then re-did the `twbs` changes (hence the 2nd-to-last commit).

#8560 will unfortunately be lost as collateral damage; it'll need to be rewritten & ported to Grunt.

This could probably use a wee bit of testing.