Use the cryptographic RNG instead of Random() for generating boundaries

Using Random() could potentially produce identical boundary strings
due to its use of the system clock as the seed value and that causes
mail clients like Thunderbird to break (they can't handle nested
multiparts that use identical boundary strings).
Don't include <> around the Message-Id or Content-Id property values.

This makes it easier to construct HTML mail having it reference images/etc
via the Content-Id (string.Format ("cid:{0}", part.ContentId)).
Modified IContentObject to provide an "Open()" method to get access to the decoded stream

This replaces the Stream property which uselessly provided the raw encoded stream.
minor code cleanup
Fixed UnitTests after change to Message-Id/Content-Id semantics
Fixed MimePart to recognize Content-Transfer-Encoding: uuencode
Fixed UUDecoder to properly scan for the begin-line
Added some rmarks for various properties in MimeMessage
Properly handle parsing address fields that have nothing but whitespace.
Modified MimeParser to implement IEnumerable<MimeMessage>
Added a default protected .ctor for OpenPgpContext

Also changed PublicKeyRingPath and SecretKeyRingPath setters to protected
code cleanup
Improved documentation a bit
Wrote a little more documentation...
Bumped version to 0.21.0.0
Added unit tests for broken rfc2047 encodings
Optimized ByteExtensions by replacing HasFlag() usage with bit masking

Increases performance significantly - many thanks to Mike Krueger for
suggesting this (many moons ago, although I am now just getting around
to testing it).
Regenerated documentation
Improved docs for TextPart and ParserOptions
Documented ParseException