The previous enum was good at accomplishing dynamic key generation for
a few cases, but it fell short in others:
1. It could not discern group names and command names
2. It could not give you more contextual data such as the full object
currently being translated.
On top of that, the context being a required parameter for
Translator.translate meant that it wouldn't be possible to re-use the
translator for other use cases outside of the rigid ones defined in the
library.
To alleviate these concerns, new enum attributes were added along with
a richer type for obtaining even more context.
- Document `options` for AppCommand
- Remove `choices` and `required` from AppCommandGroup
- Rename `arguments` to `options` since it can include `AppCommand` and `AppCommandGroup`.
This implements it in three different ways:
* The first is using typing.Literal for quick and easy ones
* The second is using enum.Enum for slightly more complex ones
* The last is using a Choice type hint with a decorator to pass
a list of choices.
This should hopefully cover most use cases.