sorting: make `order` and `alg` keyword arguments.

The idea here is that the ordering and algorithm for sorting are
two orthogonal parameters that have sensible defaults: neither,
both or either can be independently specified. The resulting API
is slightly more verbose but also somewhat more self-documenting.

Another sign that this might be on the right track is that this
change reduces the LOC of base/sort.jl by 41 lines and reduces the
method count of sort, for example, from 12 to 6.
sorting: move matrix sorts up with other generic sorting functions.
sorting: eliminate a few nans2{left,right} definitions via defaults.
sorting: keyword arguments for `by` and `lt` as well.
sorting: make ReverseOrder parametric -- can reverse any ordering.
sorting: add `rev` boolean keyword to reverse any sort ordering.

Also added lt, by, order, rev keywords to the searchsorted* funcs.
sorting: deprecations for the old sorting API
Merge pull request #3665 from JuliaLang/sk/sort-keywords

sorting API refactor: keywords!