BUG: sparse: fix bugs in dia_matrix.setdiag

Some bugs in dia_matrix.setdiag slipped through. This PR fixes:

- hide details of the internal dia_matrix data representation in
  setdiag(), so that setdiag() behavior is same for all spmatrix types

- fix bugs in resizing self.data, which doesn't always have
  self.shape[1]==N

- add scalar broadcasting behavior to setdiag() for all matrix types

- add comprehensive tests

(Milestone added --- we don't want to have setdiag with known bugs there...)