Provide a couple of quality-of-life usability improvements for Python bindings,
in particular:
- give access to the list of types for the list of op results or block arguments, similarly to ValueRange->TypeRange,
- allow for constructing empty dictionary arrays,
- support construction of array attributes by concatenating an existing attribute with a Python list of attributes.
All these are required for the upcoming customization of builtin and standard
ops.