public void Add(string topic, T node)
            {
                string[] parts   = Topic.Split(topic);
                var      current = this;

                string currentTopic = "";

                foreach (var part in parts)
                {
                    currentTopic += "/" + part;

                    if (Topic.IsWildcard(part))
                    {
                        current.nodesAsterisk.Add(node);
                        return;
                    }

                    if (!current.HasSubtopic(part))
                    {
                        current.subtopics.Add(part, Router <T> .ForTopic(currentTopic));
                    }

                    current = current.subtopics[part];
                }

                current.nodes.Add(node);
            }
            public void Remove(string topic, T node)
            {
                string[] parts   = Topic.Split(topic);
                var      current = this;

                foreach (var part in parts)
                {
                    if (Topic.IsWildcard(part))
                    {
                        current.nodesAsterisk.Remove(node);
                    }

                    if (!current.HasSubtopic(part))
                    {
                        // No subscriber has subscribed the topic
                        // Still, that's weird.
                        return;
                    }

                    current = current.subtopics[part];
                }

                current.nodes.Remove(node);
            }