Sendmail delivery shell arguments escaping fix

I'd like to suggest fixes on how the sendmail delivery escapes some of
the arguments given to the sendmail program via a shell.

I might be responsible for some confusion about how those arguments
should be handled (escaped or quoted), from an earlier pull-request
(#214), I should have been more active and commented, but at the time
I relied on a monkey-patch that I've been keeping since then.

I want to stop using that monkey-patch, but the sendmail delivery code
has been going under multiple changes and as of today it does not seem
usable to me (it will modify the envelope sender and recipient
addresses, so the mail will be sent to *different* recipients than
those asked, and will bounce to a *different* address than the one
set).

The order of the changes I suggest is surprising, as I start by
refactoring the spec before doing any fix, which is not often a good
idea. Anyway, I tried three different approaches, first reverting all
some commits, but also just doing fixes incrementally. Both felt like
the wrong way, the changes were difficult to write and understand,
mostly due to the fact earlier changes were not in sync with the tests
or vice-versa.
Last approach, refactoring specs, fixing a few and adding some missing
examples *before* gave me the minimum level of maintainability for the
test-suite I wanted, in order to make change easily and confidently
(also makes history/intent of my changes more understandable).

--------------------------------------------------------------------

Here is a short past chronology if it helps understand history of
"breakages":

  * Before 12bfaad0, it works.

  * 12bfaad0 they're quoted, so they will be altered.

  * 73aa3ce0: I suggest this change, fixing only for the envelope
    sender, just quoted as before (still broken but only for
    recipient, and we lose escaping on envelope sender, we just have
    quoting, it's also a regression.

  * ac56f03b reintroduce again escaping and quoting for envelope
    sender, which can't work.

  * 81e9940b intent is for sendmail to stop processing option flags
    but it won't do that, instead it will break escaping with a less
    safe custom version of ruby 1.9.2 Shellword#shellescape, while
    still quoting those escaped arguments.  However the main problem
    is that this change also introduce escaping and quoting for
    destinations (introducing same bug as envelope sender), while
    modifying many tests to "force them to pass", which hides the
    regression.

  * a944f31c in the real modification intended in previous described
    commit.

--------------------------------------------------------------------

  Then my changes follows, I hope the commit messages describe
well-enough the intent of my changes, but I can fix if needed.
  As said the first commit, refactoring and changing a bit the spec
might surprise, also as rspec syntax can take many forms, there might
be some "subjectives" changes, but I tried to keep the same spirit and
convention as before, or as in other specs.

  I still have some other suggestions*, still for the sendmail
delivery, but needed a "working" starting-point and this pull request
already contain many changes (maybe too many).

  By the way it also removes an exim delivery mechanism, which seems a
duplicate of the sendmail one (might maybe requires its own
pull-request for this change?).

--------------------------------------------------------------------

*: change I may suggest and/or work on after, is to avoid spawning a
shell totally, that way we spawn one process instead of two, and we
don't need anymore to escape or quote at all (we "just" need to pass
an array of strings instead of a string to IO.popen).