Implement memory-efficient streaming save

Hi, thanks for a useful library :)

Whilst reading through your source I noticed that your `Attachment::getData()` method reads the entire message part into memory, please see attached streaming save implementation of `Attachment::saveAs()` as an improvement on this.

You'll notice there is some code duplication regarding the encoding, this is intentional as I didn't want to impact on compatibility by changing `Attachment::getData()` and `Message::decode()`.

Regards,
Stephen