Bug 881469 - [Messages] Implement Navigation object r=azasypkin,schung

This commit implements a Navigation abstraction to handle navigating between
panels. It also introduces the concept of panels.

Each panel can have 4 lifecycle methods: beforeEnter, afterEnter, beforeLeave,
beforeEnter. These methods either return nothing or a promise.