You can do this with Trac (the team at my company does something similar), but it will require some configuration work.
First, you need the opportunity to assign three people to the ticket. To do this, add custom tab fields (enter "text") with names such as "Reviewer" and "Tester". They will be used to store the names of non-developers assigned to the ticket.
You will also want to add a new state to the workflow of the Trac Total Station to represent the state in which testing and verification is being performed. For the sake of discussion, I will call this state “verification.” Insert this state into the workflow so that the ticket moves from the assigned / accepted → check → closed.
You will also need some way for the tester and reviewer to indicate that they have subscribed to the changes. To do this, you can add two more custom fields (such as "checkbox") to the ticket. You can name these "Review Complete" and "Test Complete." These tickets will be canceled by default and the tester / reviewer will check them as soon as they have successfully completed their testing / reviewing work.
This should get you started. Regarding some of the more advanced parts of your question, you have several options.
You can add some custom javascript that will prevent the user from being listed in multiple owner fields. Javascript will run whenever the owner, reviewer, or tester field is changed. If the new value in this field matches the value in one of the other two fields, the other field will be cleared. Instead of writing custom Javascript, one of the following plugins can do this for you:
source share