Triangular matrix types

A triangular or trapezoidal view of an underlying matrix. The view
can either be of the upper or lower triangular part of the matrix, and
can optionally include or exclude the diagonal. If the diagonal enum
is Unit, the diagonal entries of the underlying matrix are not
referenced, but are assumed to be 1. The type arguments are as follows: