Refactor python bindings
The old way of building Python bindings relied on a hacky pre-processor define. All Python bindings were compiled into a single shared object, not telling if the CPU or GPU version was build. I changed the build process so that every library is built into a separate shared object, making the Python package more user-friendly.
I also switched the build from skbuild to skbuild-core, the follow-up project. Now only one config file (pyproject.toml) defines all variables used for the configuration.