Adjust (for) to just use itertools.product

 This is to avoid nesting in for loops, helping make clear
 what (break) and (else) do.

 This commit is hereby dedicated to @nedbat
add test for new for logic.
Add handling for (for []). Nice catch, @olasd.
Fix a few typos in the tests. Thanks again, @olasd
slice is amazing, @olasd is amazing, I love everything.
Merge master onto pr/429