[commands] Refactor typing evaluation to not use get_type_hints
[commands] Refactor typing evaluation to not use get_type_hints

get_type_hints had a few issues:

1. It would convert = None default parameters to Optional
2. It would not allow values as type annotations
3. It would not implicitly convert some string literals as ForwardRef

In Python 3.9 `list['Foo']` does not convert into
`list[ForwardRef('Foo')]` even though `typing.List` does this
behaviour. In order to streamline it, evaluation had to be rewritten
manually to support our usecases.

This patch also flattens nested typing.Literal which was not done
until Python 3.9.2.

rapptz/discord.py,Rapptz/discord.py,Harmon758/discord.py,Harmon758/discord.py