Added YAML deserialization

It was currently impossible to deserialize an `ImmutableStruct` serialized to YAML since the default behaviour relies on the availability of public setters. I've worked around the issue by make a private alias of the public setters before undefining them.

I'm very well conscious that this creates a potential backdoor for mutability but, at least in the case of the application I'm currently working on, it's a trade off worth considering. 
Perhaps that this feature can be made optional by the inclusion of a module?

Tested with 1.9.3 and 2.0.0.