text: Title: Implement a way to identify `CircuitOperations` (operations with loops)
  Body: **Is your feature request related to a use case or problem? Please describe.**
  I've been doing a lot of transformations on `Circuit`s containing `CircuitOperation`s. Sometimes I need to manipulate `CircuitOperation`s.  The way I nominally identify them is using `isinstance(..., cirq.CircuitOperation)`. But it turns out this doesn't work if the `CircuitOperation` is contained in a `cirq.TaggedOperation`.
  
  **Describe the solution you'd like**
  Implement a function like `cirq.measurement_key_objs` that I can trust to always tell me if an operation is a `CircuitOperation` (or effectively one under the hood).
  
  **[optional] Describe alternatives/workarounds you've considered**
  Writing my own custom identifier that handles TaggedOperations. But am I missing something?
  
  **[optional] Additional context (e.g. screenshots)**
  
  
  **What is the urgency from your perspective for this issue? Is it blocking important work?**
  
  P3 - I'm not really blocked by it, it is an idea I'd like to discuss / suggestion based on principle 
  