text: Title: Implement consistancy checks for unitary protocol in the presence of ancillas
  Body: **Is your feature request related to a use case or problem? Please describe.**
  #6101 was created to update `cirq.unitary` and `cirq.apply_unitaries` protocols to support the case when gates allocate their own ancillas. This was achieved in #6112, however the fix assumes the decomposition is correct. a consistency check is need to check that. This is the fourth task on https://github.com/quantumlib/Cirq/issues/6101#issuecomment-1568686661. 
  
  The consistency check should check that the result is
        1. Indeed a unitary
        2. CleanQubits are restored to the $\ket{0}$ state.
        3. Borrowable Qubits are restored to their original state.
  
  
  
  **Describe the solution you'd like**
  for the correctness checks we need a `cirq.testing.assert_consistent_unitary` that does the checks listed above.
  
  
  **What is the urgency from your perspective for this issue? Is it blocking important work?**
  for the first task
  P1 - I need this no later than the next release (end of quarter)
  
  for the second and third tasks
  P3 - I'm not really blocked by it, it is an idea I'd like to discuss / suggestion based on principle 