Implement NRows for various backends

Allows differentiation between `expr.count()` (will eventually ignore `NA`
values) and `expr.nrows()` (never ignores `NA` values).
Hm I think this should work on things with datashapes like `datashape('20 * 24 * int')`, which `istabular` includes