I've been thinking more about this.  The Comm manager really is just a callback/sending mechanism of the kernel for routing messages.  It seems natural to make the Comm manager an attribute of the kernel object (initialized at kernel startup), and then possibly expose the register function through the global IPython object via a wrapper function for convenience.