Cleanup Sheer Amount of Options To Set Nim Compile Switches
> This would represent a breaking change and would require a major version bump.

**One of the main things that needs to happen is to have hopefully 1 place to set Nim compile args. This should probably be in the form of directly setting `nimporter.NimCompiler.NIM_CLI_ARGS` but any better ideas are definitely appreciated.**

Here are the ways that compile options can be configured:

* Directly setting `nimporter.NimCompiler.NIM_CLI_ARGS`
* Using `*.nim.cfg`
* Using `*.nims`
* Using `switches.py` (deprecated, needs to be officially removed)
* Using the `danger=True` flag in `build_nim_extensions()`

These use cases need to be kept in mind with any new designs:

* Local import during development
* Precompiling for Docker
* Source distributions that require Nim
* Binary distributions that only require Nimporter

Some random todo items would also be nice during this major update:

- [ ] Update test coverage numbers
- [ ] Remove `switches.py` support
- [ ] Add clear documentation on the difference and use cases of an **extension library** and an **extension module**
- [ ] Refactor the codebase to be a bit flatter (bunch of static classes are acting basically like namespaces, module namespaces could be used instead)