Port over 2.0 release changes into the master branch

This pulls in the 2.0 release changes, merging it with the master branch. Cleaner solution for the way `release/2.0` has worked than cherry-picking.