Block.shape inconsistencies?
Trying to simplify some things in internals.  I expected that it would always be the case that `len(block) == block.shape[0]`, but `shape` is flipped in a few cases.

```
class Block:
    def __len__(self):
        return len(self.values)

    @property
    def shape(self):
        return self.values.shape

class NonConsolidatableMixin:
    @property
    def shape(self):
        if self.ndim == 1:
            return (len(self.values)),
        return (len(self.mgr_locs), len(self.values))

class SparseBlock:
    @property
    def shape(self):
        return (len(self.mgr_locs), self.sp_index.length)

    def __len__(self):
        try:
            return self.sp_index.length
        except AttributeError:
            return 0
```

So for Block `len(b) == b.shape[0]`, 1-dim NonConsolidatable (and ScalarBlock) behave as expected, but 2-dim have `len(b) == b.shape[1]`.  Ditto `SparseBlock` (a try/except notwithstanding).

What's the internal logic here?