State monad generalised

Hi Enzo,

This pull request is a generalisation of my previous fixes.
+ generalise the use of the SMTPState monad, for SMTP and SMTPS sequences
+ handle SMTP sequences with different orderings, e.g. 250-AUTH, 250-ENHANCEDSTATUSCODES or 250-ENHANCEDSTATUSCODES, 250-AUTH (which sometimes happen)
+ handle optional replies; for example, the TLS sequence sometimes contains the message 250-PIPELINING