This patch adds two new operations:
The first is the DataBoundsOp, which is based on OpenACC's DataBoundsOp, 
which holds stride, index, extent, lower bound and upper bounds 
which will be used in future follow up patches to perform initial 
array sectioning of mapped arrays, and Fortran pointer and 
allocatable mapping. Similarly to OpenACC, this new OpenMP 
DataBoundsOp also comes with a new OpenMP type, which 
helps to restrict operations to accepting only 
DataBoundsOp as an input or output where necessary
(or other related operations that implement this type as 
a return).
The patch also adds the MapInfoOp which rolls up some of 
the old map information stored in target
operations into this new operation, and adds new
information that will be utilised in the lowering of mapped
variables, e.g. the aforementioned DataBoundsOp, but also a
new ByCapture OpenMP MLIR attribute, and isImplicit boolean
attribute. Both the ByCapture and isImplicit arguments will 
affect the lowering from the OpenMP dialect to LLVM-IR in 
minor but important ways, such as shifting the final maptype
or generating different load/store combinations to maintain
semantics with the OpenMP standard and alignment with the
current Clang OpenMP output as best as possible.
This MapInfoOp operation is slightly based on OpenACC's 
DataEntryOp, the main difference other than some slightly
different fields (e,g, isImplicit/MapType/ByCapture) is that 
OpenACC's data operations "inherit" (the MLIR ODS 
equivalent) from this operation, whereas in OpenMP operations
that utilise MapInfoOp's are composed of/contain them.
A series of these MapInfoOp (one per map clause list item) is 
now held by target operations that represent OpenMP 
directives that utilise map clauses, e.g. TargetOp. MapInfoOp's
do not have their own specialised lowering to LLVM-IR, instead 
the lowering is dependent on the particular container of the 
MapInfoOp's, e.g. TargetOp has its own lowering to LLVM-IR
which utilised the information stored inside of MapInfoOp's to 
affect it's lowering and the end result of the LLVM-IR generated,
which in turn can differ for host and device.
This patch contains these operations, minor changes to the 
printing and parsing to support them, changes to tests (only 
those relevant to this segment of the patch, other test 
additions and changes are in other dependent 
patches in this series) and some alterations to the OpenMPToLLVM 
rewriter to support the new OpenMP type and operations.
This patch is one in a series that are dependent on each
other:
https://reviews.llvm.org/D158734  
https://reviews.llvm.org/D158735 
https://reviews.llvm.org/D158737
Would it make sense to have a common interface (BoundLikeOp) so lowering can be shared more easily.