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 deserializer initially looks for a property name that exactly matches the one specified in the YAML file (as per the previous behaviour), but if a matching property isn't found, matching is attempted 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. Similar convention-based logic could be implemented for serialization as well.