Can we make the msg_id -> cell object function something in the notebook object, then?  It seems we are playing in the internals of the notebook a bit too much here.  It also seems pretty inefficient to loop through all of the cells looking for the msg_id.  Perhaps a reverse dictionary should be stored?