Add parsing for attributes and attibutes on operations.  Add IR representation
for attributes on operations.  Split Operation out from OperationInst so it
can be shared with OperationStmt one day.

PiperOrigin-RevId: 203325366
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index 0a773f1..df23424 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -38,15 +38,11 @@
     break;
   case Kind::Array: {
     auto elts = cast<ArrayAttr>(this)->getValue();
-    if (elts.empty())
-      os << "[]";
-    else {
-      os << "[ ";
-     interleave(elts,
-                 [&](Attribute *attr) { attr->print(os); },
-                 [&]() { os << ", "; });
-      os << " ]";
-    }
+    os << '[';
+    interleave(elts,
+                [&](Attribute *attr) { attr->print(os); },
+                [&]() { os << ", "; });
+    os << ']';
     break;
   }
   }