Insists that input matrix is square. Uses the 'diagonal'
attribute when available and has specialised handling of ff,
big.matrix, dgCMatrix matrices. Does not check that row and
column names are identical for those matrix classes (unlike the base
diag function, but always uses rownames.