Derive Macros

Takes a given enum (which in turn accepts child enums) and auto generates a Parent::From so the child can turn into the parent and a TryInto<Child> for Parent so the Parent can attempt to turn into the child.