* Slice: reverse and shufffle v2
Migrate from reflection to generic form
Note: after migration, old reverse must be removed
* Suffle test: remove reflection calls
* Reverse test: change name of test
The current behavior can result into wired edge cases.
**Current behavior**
if find was unsuccessfully then it will return the first element of the
slice
**Desired behavior**
if find was unsuccessfully then it should return negative ok and a none
value
Group by: split slice into two groups, applies on each slice element a
predicate func to categorize this element.
Changes
* Add groub by func
* Add test case for this func
IntSlice and StringSlice: preallocate memory up front for output slice.
Instead returning a error throw a panic because most likely it's a
programming error.
Contain: rename slice to iterableType and add default case for type
mismatches