Implement flag to clean unused dependencies

This addresses issues #2569
https://github.com/elixir-lang/elixir/issues/2569
Update CONTRIBUTING.md

Corrected 'should be send' to 'should be sent'
Merge pull request #2703 from Kosmas/master

Update CONTRIBUTING.md
Always compile project if task cannot be found

Closes #2704.
Mix should not depend directly on Logger
Fix a typo in Mix.Project.compile_path doc
Merge pull request #2708 from alco/typo

Fix a typo in Mix.Project.compile_path doc
Ensure we automatically load deps on compile
Purge in memory in modules before consolidating, closes #2700
Add protocol consolidation support to escript.build. Closes #2699
Do not crash the caller when Logger is not available

Instead, return :ok | {:error, :not_available} and leave it up
to the caller to decide.
Fix logger watcher race condition

Previously a backend could be removed from logger and the watcher would
not have exited before the remove_backend/1 call returned. This meant
that a new watcher could not always be started because the child
(watcher) might still exist but be about to die.
Allow configurable timeout and catch exits on logger
Fix race condition in Logger.ErrorHandlerTest

When crashing the error logger handler, the handler's watcher could log
its message before Logger was flushed, causing the watcher's log
message to appear in the first, rather than second, capture_log.
Merge pull request #2713 from fishcakez/logger_eh_racecon

Fix race condition in Logger.ErrorHandlerTest
Merge pull request #2712 from fishcakez/logger_rc

Fix logger watcher race condition
Use to_string when possible on Logger.log
Remove code duplication on watcher
Update CHANGELOG
import_config/1 now accepts wildcards