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
Recompile project if elixir version changes
Merge pull request #1577 from ericmj/mix-recompile

Force recompile of project when elixir version changes
Pass Line and File as arguments to we don't read the table twice
Get rid of unused variable warning
Clean up app.start tests
Do not stack rm_rf errors together
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