Added smart stacks: they tell their contained objects about when they're pushed and popped, and when they become topmost or get pushed further down the stack.
Added smart queues: they tell contained objects when they're enqueued or dequeued, when they get to the front of the queue and pop off from it, and when they're being pushed back if client code adds an element to the head instead of the tail.