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