[MLIR][DLTI] Pretty parsing and printing for DLTI attrs (#113365)

Unifies parsing and printing for DLTI attributes. Introduces a format of
`#dlti.attr<key1 = val1, ..., keyN = valN>` syntax for all queryable
DLTI attributes similar to that of the DictionaryAttr, while retaining
support for specifying key-value pairs with `#dlti.dl_entry` (whether to
retain this is TBD).

As the new format does away with most of the boilerplate, it is much easier
to parse for humans. This makes an especially big difference for nested
attributes.

Updates the DLTI-using tests and includes fixes for misc error checking/
error messages.

GitOrigin-RevId: 5c1752e368585e55c0335a7d7651fe43d42af282
diff --git a/test/Fir/tco-default-datalayout.fir b/test/Fir/tco-default-datalayout.fir
index 0741e82..c6a4ddb 100644
--- a/test/Fir/tco-default-datalayout.fir
+++ b/test/Fir/tco-default-datalayout.fir
@@ -7,6 +7,6 @@
 // CHECK: module attributes {
 // CHECK-SAME: dlti.dl_spec = #dlti.dl_spec<
 // ...
-// CHECK-SAME:    #dlti.dl_entry<i64, dense<[32, 64]> : vector<2xi64>>,
+// CHECK-SAME:    i64 = dense<[32, 64]> : vector<2xi64>,
 // ...
 // CHECK-SAME:    llvm.data_layout = ""
diff --git a/test/Fir/tco-explicit-datalayout.fir b/test/Fir/tco-explicit-datalayout.fir
index 50d8d83..cae500a 100644
--- a/test/Fir/tco-explicit-datalayout.fir
+++ b/test/Fir/tco-explicit-datalayout.fir
@@ -8,6 +8,6 @@
 // CHECK: module attributes {
 // CHECK-SAME: dlti.dl_spec = #dlti.dl_spec<
 // ...
-// CHECK-SAME:    #dlti.dl_entry<i64, dense<128> : vector<2xi64>>,
+// CHECK-SAME:    i64 = dense<128> : vector<2xi64>,
 // ...
 // CHECK-SAME:    llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:128-i128:128-f80:128-n8:16:32:64-S128"