default implementations of diagonal?, upper- and lower- triangular? added