Expose socket options

This change allows to set socket options.
It's up to the user to pass the options as tuple of tuples, where each
tuple is in the form of (family, option, value).
Please note that if the values passed in the tuple are not correct no
excetion are managed by the new code but every error is propagated to
the caller.