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`.
Cool, I didn't know I could use `when` for temporary types in `@spec`.  It take it, it is correct to use `element` and `mapped_element` to indicate that the elements the sorter received came from the mapper?  I wasn't sure if the type spec should include that distinction and indicate the data flow.