enhance(sidenav): support promise notifications for open, close, toggle

Closes #947.
Why do we need a `$timeout` here.