RT is distributed with condition 'On Resolve' which is based on module RT::Condition::StatusChange. This module has functionality to handle other statuses as well, but only one thing you have to do. You have to insert description of the new scrip condition into database of the RT.
To get condition 'On Stall':
INSERT INTO ScripConditions( Name, Description, ExecModule, Argument, ApplicableTransTypes, Creator, Created, LastUpdatedBy, LastUpdated ) VALUES ( 'On Stall', 'Whenever a ticket is stalled', 'StatusChange', 'stalled', 'Status', <user_id>, NOW(), <user_id>, NOW() );
Get user id from other records in this table, this id is not used much, but should be correct.
To get 'On Delete' and other conditions you have to insert similar data where Argument field matches the status value.