Rework `ojax.OTree` field type representation.
Using custom subclass of
`dataclasses.Field` instead of setting custom metadata. This simplifies field
type checking and allows for further subclassing. Specifically:
- Classes `Aux`, `Child`, `Ignore` are added which indicates the type of
`OTree` field. They all inherit from the abstract base class `OTreeField`
which is itself a subclass of `dataclasses.Field`.
- The function `ojax.get_field_type` and the enum class `ojax.FieldType` is
removed since they are now unnecessary.
Note that users should still use functions `aux()`, `child()`, `ignore()` to
declare field types since directly using classes could generate confusion for
type checking. This is also in line with the standard `dataclasses` usage.