TYP: Narrow down types of arguments (DataFrame)
closes https://github.com/pandas-dev/pandas/issues/8 (https://github.com/noatamir/pydata-workshop/issues/8)
 [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
 All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
 Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
Preview discussion:
We prefer using Literal["a"] | Literal["b"] instead of str. Look into the documentation what is allowed and the narrow the types down appropriately. Generally, we probably already have type definitions in pandas/_typing.py like NaPosition for the first item in the list below.

You can locate the appropriate file through searching for class DataFrame in the repository.

DataFrame methods:

- Specifykind and na_position more precisely in sort_values (can look at sort_index, it is already done there)
- Specify keep for nsmallest and nlargest more precisely
- Specify join and errors in update more precisely
- Specify na_action in applymap more precisely
- Specify validate in merge and join more precisely
- Specify how in to_timestamp more precisely
- Specify orient in from_dict more precisely
- Specify if_exists in to_gbq more precisely
- Specify byteorder in to_stata more precisely
- Specify engine in to_parquet more precisely
- Specify engine in to_orc more precisely
- Specify parser in to_xml more precisely
- Specify method in reindex more precisely

#Reviewers
@phofl @noatamir @jorisvandenbossche and @MarcoGorelli
Help, @phofl - i keep getting a mypy error 
```
pandas/core/frame.py:1738: error: Incompatible types in assignment (expression has type "str", variable has type "Literal['columns', 'index', 'tight']")  [assignment]
Found 1 error in 1 file (checked 1418 source files)
```

this is completely new to me, so I do not have any idea how to fix that. Could you help out, please? @benedikt-mangold: Since we changed `orient` from str to Literal `orient` must be of type Literal. Maybe we could remove the line 1738 in frame.py `orient = orient.lower()` at all. 
@phofl Would this be ok in terms of backward compatibility? This is an annoying case…

You can add „  type: ignore[assignment]“ after the lower in the same line.

no we would have to deprecate first, which is something I’d be open to do. But not in this pr (we try to keep things separated) @pschleiter and @phofl  -> worked, build is green 🎉  @pschleiter and @phofl - halp -> why on earth would it be red now ?? > @pschleiter and @phofl - halp -> why on earth would it be red now ??

merging did not contain all changes in .typing.py @phofl ready to merge 🎉  Thanks @benedikt-mangold 