Got serializing a single level 1 character with gear.

- Character.PlayerName can now be null.
- Changed Character constructor to take an IEnumerable<int> rather than
  int[] for ability scores.
- Character now implements IEquatable<Character> and overrides Equals and
  GetHashCode. Equality is based on the scores, levels, origins, trained
  skill and, of course, name.
- Added Character.ToString() for easier debugging.
- Made Armor abstract.
- Deleted ArmorWeightType.
- Origin now implements IEquatable<Origin> and overrides Equals and
  GetHashCode. Equality is based on name, ability score and power source
  (not critical hit effect as it is too time consuming to implement).
- Added new XXXJsonData classes for other weapon and armor types used for
  serializtion, including ArmorWeight.
- Changed CharacterJsonData.EquippedGear from a Dictionary<string,
  ItemJsonData> to a Dictionary<Slot, ItemJsonData>.
- Changed many properties that were previously strings to enums and now
  use the StringEnumConverter.
- Changed origins to be stored as types using a custom TypeNameConverter.
  Although convenient, this is actually a security risk so will need to
  revisit this in the future.
- Added ToItem and FromItem to ItemJson data and subclasses for Gear
  serialization.
- Gave up on creating a hand crafted JSON Schema.  Polymorphism is too
  hard to represent, possibly due to the NetwonSoft.Json class being used.

Future work:
- Support serializing levels.
- Fix potential security flaws such as serializing as types.
- Remove now unused schema.