Property aliasing

This adds the ability to deserialize YAML into an object where the property names do not match up exactly. This has been implemented similar to how other serializers do it ([JavaScriptSerializer](http://msdn.microsoft.com/en-AU/library/system.web.script.serialization.javascriptserializer.aspx) has very similar behaviour for example). The property mapping can be done automatically using standard .NET property naming conventions (eg. `part-no`, `part_no` or `partNo` in the YAML become `PartNo`), or manually using the new `YamlAlias` attribute.

Currently only implemented for deserialization.