Mostly optimizations

As usual, the detailed comments are included in the individual commit messages. The main changes are:

 * Optimize `frame.Rows` (from ~2600ms to ~600ms for 1M rows on my machine). This mainly reduces the number of allocated objects (fixes #165).

 * Optimize windowing and chunking functions - the idea is to create `LinearRangeIndex` representing a range inside an index. When returning window/chunk, we only create this virtual index for the specified range. The full index is only needed for complex processing, but not e.g. for `Series.mean`. (Related to #161)

 * Similar optimization for the resampling functions (which work by finding range based on the provided keys and then running aggregation based on the keys).

 * I also did some tweaks to the naming of ordering/sorting functions - the idea is to use the name `sort` for all the functions (and make `order` legacy). So, `orderRows` becomes `sortByRowKeys` which is perhaps longer, but more meaningful (and easy to find with the other sorting functions). I left the old ones and marked them as obsolete to avoid breaking changes.