Refactor push_spec with new MockRestartCommand

  Before, these tests were asserting that invoke was called on the
  Subject Under Test in an attempt to assert that apps were restarted.
  However, we should not be testing that messages internal to an object are
  received. That is overspecification in the tests which makes
  refactoring very difficult.

  Instead, we introduce a MockRestartCommand,
  which allows visibility into the actual behavior we care about.