add "shuffle" method

Would be useful to have "shuffle" which ensures rows are in random 
order -- so future `take` and `foldLeft` operations get random data
Looking for guidance on implementation: 
- should reducers be implicit (so one calls shuffle(){ _.reducers(50) } ?)
- should refactor groupRandomly to rely on modified shuffleAux?
- should seed be implicit?
- does grouping by shard, as in groupRandomly guarantee that each 
reducer gets one shard?
Fixes issue 280
added tests; shard now supports seed, shuffle uses shard
added test; shard now supports seed, shuffle uses shard
fix spacing
now shards must be explicitly specified
Merge pull request #305 from tchklovski/patch-2

add "shuffle" method
Merge pull request #308 from twitter/feature/issue-280

Fixes issue 280