Lays the foundation for the v2 log package based on slog
The recent discussions around the labkit strategy have determined that slog will be the strategic logger for Go development going forward. Adopting this in the current v1 Labkit setup has proved a little too complex, given the original log package leans heavily on a globally instantiated logrus logger.
To preserve the original log contract, the best course of action is to define a v2 package, which will be a clean slate upon which new functionality is developed.
I'm intentionally keeping this MR small and focusing purely on a basic Log package and laying the foundations for more complex functionality.
Architectural Simplification
One of the key things this MR is looking to do is to ensure we have no tight coupling of concerns between packages and move us to a more compositional approach.
This should hopefully help to reduce the heaviness that engineers have faced with the original setup.
Removing Global State
The other key concern I'm looking to address with this v2 setup is tackling the problem of global state. One of Go's strengths is in its explicitness, and I'd like to avoid unexpected side effects from being triggered when engineers import these packages.