Apply APPLIED/FAILED to non-staged sessions (8/n)

1. installNonStaged() now returns a future so we can do cleanup and
   state changes when the whole install phase is completed. This makes
   it easy to apply APPLIED/FAILED to both staged and non-staged
   sessions.
2. Following (1), dispatchSessionFinished() is no longer needed inside
   onPackageInstalled(). It is now called in install() when the install
   phase is completed.
3. Following (2), child sessions don't need mRemoteStatusReceiver
   anymore. The parent's mRemoteStatusReceiver will be used when needing
   user actions.
4. StagedSession#installSession() is always called for apex-only
   sessions. Now we have a single code path to do cleanup and state
   changes for all staged/non-staged apk/apex/mix sessions.

Bug: 210359798
Test: atest StagingManagerTest \
            CtsAtomicInstallTestCases \
	    GtsStagedInstallHostTestCases \
	    CtsRootPackageInstallerHostTestCases \
	    CtsStagedInstallHostTestCases \
	    CtsInstallHostTestCases \
	    StagedInstallInternalTest

Change-Id: I5b37185256a11fa3c534f4cbe0b56154f4816a82
4 files changed