Conversion/elimination of sort functions.

* Remove insertionsort, quicksort, mergesort, timsort in
  favor of sort(InsertionSort,...), sort(QuickSort,...), etc.
* Removed underscores from search related function names:
  * sort_by -> sortby
  * search_sorted_* -> searchsorted*
  * issorted_{by,r} -> issorted{by,r}
  * etc.
Fix stray search_sorted => searchsortedlast
Updated sort docs.
Sorting. Now with 1000000% less metaprogramming.

Refactor of sorting, taking #2066 to its logical conclusion.
Fast clever integer-op sorting for floats (not for sortperm though).
Use integer comparisons to sort floating-point values.

This is a fairly insane commit, but very composable: you can define a
new sort and get correct, optimized sorting of float arrays using that
sorting algorithm for free. The same applies to sortperm, which is a
nice trick as well.
Reinstate specialization of Perm on the vector argument type.

This fixes the previous commit's performance regression for sortperm.

Also note that if you don't import Sort.Reverse into Sort.Float, then
reverse sorting performance tanks and the type-inferred, lowered code
for forward and reverse sorting end up rather alarmingly different.
This happens because there is a type in Base called Reverse and the
inference seems to get confused. There should definitely be some kind
of warning if such confusion occurs.
Merge branch 'master' into sk/sort