Improve OptionParser switch validation

This adds a third element to the tuple returned from OptionParser.parse/2 when the value for an option doesn't match its switch type.
Use list concatenation operator instead of function
Add documentation for invalid switches
Change OptionParser to always permanent invalid list

The tuple returned from OptionParser now always includes the third element (invalid options list).
Update OptionParser test for permanent invalid list
Update mix tasks for OptionParser permanent invalid list
Converge store_option and validate_option in OptionParser
Separate atomization from tokenization
Include line number in atomization
Return error when tokenizing oversized atom

When "atomizing" an unsafe string, we need to make sure the atom length
is going to be less than the system limit (255). Any function calling
`unsafe_to_atom` checks for an error and returns it if present.
Detect windows symlinks on File.rm_rf
Merge pull request #1584 from vanstee/atom-system-limit-error

Return error when tokenizing oversized atom
Merge pull request #1561 from thmzlt/option-parser-invalid-options

Improve OptionParser switch validation
Fix the build
Update CHANGELOG
Clean up option parser
Allow capture on anonymous function calls
Support IO.stream/2 and IO.binstream/2 and deprecate current IO.sream/1 and IO.binstream/1

Closes #1582