Enum.sort_by/3

Fixes #2460

Implement the `Enum.sort_by` I requested in #2460 using the signature Enum.sort_by(collection, mapper, sorter).  sorter is optional and default to `<=/2`.
We don't need to write both spec clauses as one is inflected from the other. Here is how I would write it:

    @spec sort_by(t, (element -> mapped_element), (mapped_element, mapped_element -> boolean)) :: list when mapped_element: element