Inheritance: INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld
        public void Unregister(Actor actor, GrantConditionOnPrerequisite u, string[] prerequisites)
        {
            var key  = MakeKey(prerequisites);
            var list = upgradables[key];

            list.RemoveAll(x => x.First == actor && x.Second == u);
            if (!list.Any())
            {
                upgradables.Remove(key);
                techTree.Remove(key);
            }
        }
        public void Register(Actor actor, GrantConditionOnPrerequisite u, string[] prerequisites)
        {
            var key = MakeKey(prerequisites);

            if (!upgradables.ContainsKey(key))
            {
                upgradables.Add(key, new List <Pair <Actor, GrantConditionOnPrerequisite> >());
                techTree.Add(key, prerequisites, 0, this);
            }

            upgradables[key].Add(Pair.New(actor, u));

            // Notify the current state
            u.PrerequisitesUpdated(actor, techTree.HasPrerequisites(prerequisites));
        }