Convert project stack to records
Dont run any tasks recursively from another task

The only time a task may run recursively is after a new project has been pushed to the stack.
Merge pull request #1198 from ericmj/patch-1194

Dont run deps tasks recursively when they are started non-recursively
Optimize downcase, upcase and rstrip in Unicode
No need for accumulator on downcase/upcase
Add a few sanity check tests for upcase & downcase
Implement Mix.Version, closes #1115