SCAN: Fix test after option renamed from PATTERN to MATCH.
SCAN: simplify keys list cleanup using listSetFreeMethod().
Revert "Fixed typo in SCAN comment. iff -> if."

Probably here Pieter means "if and only if".

This reverts commit 43fdf3b404413f6e3b2c39ac491238c70ecee81c.
SCAN: stay inside 80 cols.
dictScan() algorithm documented.
Fixed typos in dictScan() comment.
SCAN: refactored into scanGenericCommand.

The new implementation is capable of iterating the keyspace but also
sets, hashes, and sorted sets, and can be used to implement SSCAN, ZSCAN
and HSCAN.
SCAN is a random command and does not require output sorting.

Sorting the output helps when we want to turn a non-deterministic into a
deterministic command, in that case this is not possible.
dictScan(): empty hash table requires special handling.
SSCAN implemented.
HSCAN implemented.
ZSCAN implemented.
Aesthetic fix (missing space) into HSCAN and ZSCAN implementations.

Thanks to @badboy for reporting.
redis-benchmark: update help for new __rand_int__ form.
SCAN: tests moved to unit/scan.tcl.
SCAN test keys sorting turned into more idiomatic Tcl.
Test: added SSCAN test.
Test: added HSCAN test.
Test: added ZSCAN test.
Test: added a SCAN test trying to trigger HT resize.