'Message processing will call this when its determined that
the message should be processed within this cell.  Find the
method to call based on the message type, and call it.  The
caller is responsible for catching exceptions and returning
results to cells, if needed.'

def _process_message_locally(self, message):

    methods = self.methods_by_type[message.message_type]
    fn = getattr(methods, message.method_name)
    return fn(message, **message.method_kwargs)
