Allow successor/predecessor state tracking
Refactor test shell, expand `free` tests