[`bnb`] Introducing `BitsAndBytesConfig`
# What does this PR do?

This PR introduces a new feature termed as `BitsandbytesConfig` - enabling users to play more flexibly with `transformers` + `bitsandbytes` API.
This is also a first step of one of the major refactor we are planning to support possibly more quantization features

This PR also addresses: https://github.com/huggingface/transformers/pull/20281#issuecomment-1409894311 

With this PR it will be also possible to apply advanced usecases for `bnb` models such as offloading parameters in cpu & gpu to run some part in int8 and the other part in cpu (but in `fp32`)

Draft for now, will update the docs and fix the CI tests after a first pass 💪 

One of my comment being that we should keep `load_in_8bit` argument as it is for now (as I think this argument is quite powerful) and progressively entirely replace it with the config in the future if more quantization methods will be supported on `bitsandbytes`.

cc @sgugger 
@younesbelkada great job again. :)
I really like the refactored API which supports passing a whole config object containing all relevant BnB options in one place.
I am curious are the calculations during inference on the offloaded parameters (in fp32) to CPU and disk actually executed on the CPU or do they get transferred to one of the GPUs for calculations during every pass?<|||||>_The documentation is not available anymore as the PR was closed or merged._<|||||>This PR is now ready for review! Would love to have a round of review @sgugger <|||||>Thanks for the extensive review! I should have addressed the comments now 💪 <|||||>Thanks ! Exaclty! Looking forward to it!