replaceTo and goUp preserve equivalent prefix

When performing a replaceTo(), Flow will now compare the new backstack
against the current backstack.  Starting at the root, it will retain any
screen instances which are equal to the corresponding screen in the new
backstack.  As soon as it encounters a screen which does not equal its
replacement, Flow will abandon preservation and use the newly created
screens.