sessions:  Allow session ID's to be controlled externally.

Introduces editById as a main entrypoint (parallel to
"session" or "open"), which, given a notebook location and ID,
opens a new session to edit the notebook, or if there's already an
open session with that ID, re-uses the existing one.

This makes it so that a user can never have more than one session
open for the same notebook, which is what we want for Bunsen.
this is just copied from the way that Beaker loads from url now... maybe I should make them call a common function to make that more obvious