Make gen_smtp dialyze, bumping it up to modern day Erlang versions.
Use the application dependency list instead of manually starting apps.

This is the standard method of starting application dependencies and
is less error prone than attempting to ensure applications are started
whenever the client code needs those applications started.
Use application:ensure_all_started/1 instead of manually starting our dependencies.
Use our implementation of ensure_all_started/1 instead of the Erlang one.

This means that Erlang versions which do not have it built in can
continue to be supported.

Closes #51.
Merge pull request #50 from AeroNotix/master

Make gen_smtp dialyze, bumping it up to modern day Erlang versions.