Adding TeardownListener functionality to AutoPacket

This gives users the ability to register a lambda which is notified when the underlying AutoPacket is destroyed.  This is useful when attempting to evaluate whether an AutoPacket has been fully processed.

Users to receive the packet on teardown should make the following call:

    packet->AddTeardownListener([] {
        // ...foo...
    });