Implement nelements for various backends

Allows differentiation between `expr.count()` (will eventually ignore `NA`
values) and `expr.nelements()` (never ignores `NA` values).

Also adds an `nrows` property of symbols
I don't understand the use of `expr.ndim` here.  That would, I think, raise an error (you're iterating over an int).  Fortunately you can always assume that `expr.axis` exists.