[XLA] First step in adding Literal slice classes, to improve interface safety
and prepare for enabling more efficient interfacing from Tensor to Literal to
reduce host to device latency.
More specically:
* Introducing a new LiteralBase abstract base class that contains all immutable
methods of from the old Literal class.
* Introducing a subclass LiteralSlice to replace original LiteralView class.
LiteralSlice class is read-only and does not own Shape nor any buffer through
the Pieces. Change a number of callers to use LiteralSlice directly.
* Change Literal class to explicitly own the underlying Shape as well as owning
the underlying buffer via Piece.
* Conversion from Literal to LiteralSlice is now done via an implicit
conversion constructor instead of inheritance.
* Decouple ShapeTree from Literal classes.
* Use copy-and-swap for assignment constructors.
* Other minor cleanups.
PiperOrigin-RevId:
196016576