Fix for issue #419

This pull request fixes issue #419.

The implementation is not optimal as it removes the implicit conversion operator from MSVC builds. Conversions to boost::optional<uint16_t> should therefore done explicitly from here on.
This one in particular you may want to wrap in something like this:

    boost::optional<boost::uint16_t> port_ =
    #if (_MSC_VER >= 1600)
      port(port).as_optional();
    #else
      port(port);
    #endif