Add support for guavas Optional type

Documentation for `Optional` type can be found at <http://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained#Optional>. This pull request adds support for optional destination types, I'm looking for feedback on the implementation before starting on also supporting optional sources.

There is no compile-time dependency on guava, the code is using reflection to create `Optional` instances.