Fix edge cases for starts_with?, ends_with? and contains?
Refactor String.ends_with?

Using :binary.match should save us an allocation. Plus, the function
now looks more similar to starts_with?
Don't support nested lists in starts_with? and co.
Fix edge case for String.contains?
Reorganize tests for starts_with? and co.
Merge pull request #1195 from alco/string-fixes

String fixes