Provide better factoring for the SSA types to allow type agnostic def/use
iterators, along with type specific ones.

Also provide mechanics to cast from Operation up to OperationStmt etc.

PiperOrigin-RevId: 205175333
diff --git a/lib/IR/Operation.cpp b/lib/IR/Operation.cpp
index bca1ee9..12c0c1b 100644
--- a/lib/IR/Operation.cpp
+++ b/lib/IR/Operation.cpp
@@ -19,9 +19,9 @@
 #include "AttributeListStorage.h"
 using namespace mlir;
 
-Operation::Operation(Identifier name, ArrayRef<NamedAttribute> attrs,
-                     MLIRContext *context)
-    : name(name) {
+Operation::Operation(Identifier name, bool isInstruction,
+                     ArrayRef<NamedAttribute> attrs, MLIRContext *context)
+    : nameAndIsInstruction(name, isInstruction) {
   this->attrs = AttributeListStorage::get(attrs, context);
 
 #ifndef NDEBUG