Avoid updating contexts on route change unless necessary

On route change, contexts for dynamic segments are always marked updated,
even when identical.  Additionally, any segment after the first dynamic
segment is forced to deserialize, even if the dynamic segments have not
changed.

This change tracks whether any preceeding segments have changed before 
updating contexts, and avoids unnecessary reloads/redraws.