Repository: open-telemetry/opentelemetry-python

Issue:
W3CBaggagePropagator lowercasing keys
`opentelemetry.baggage.propagation.W3CBaggagePropagator` is lowercasing keys in `extract`, as far as I can tell [the W2C baggage spec](https://w3c.github.io/baggage/) does not define this behavior.

I also confirmed the go implementation does not lowercase keys: https://go.dev/play/p/9H4HKKmSRMA

I think just removing the `.lower()` here should fix it: https://github.com/open-telemetry/opentelemetry-python/blob/main/opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py#L96

**Steps to reproduce**
```python
from opentelemetry import baggage
from opentelemetry.baggage.propagation import W3CBaggagePropagator

carrier = {}
propagator = W3CBaggagePropagator()

ctx = baggage.set_baggage('userId', '1')
print(ctx)

propagator.inject(carrier, ctx)
print(carrier)

print(propagator.extract(carrier))
```

**What is the expected behavior?**
```
{'baggage-ce2af44a-cf4d-4151-88a5-349b34d2c353': {'userId': '1'}}
{'baggage': 'userId=1'}
{'baggage-ce2af44a-cf4d-4151-88a5-349b34d2c353': {'userId': '1'}}
```

**What is the actual behavior?**
```
{'baggage-ce2af44a-cf4d-4151-88a5-349b34d2c353': {'userId': '1'}}
{'baggage': 'userId=1'}
{'baggage-ce2af44a-cf4d-4151-88a5-349b34d2c353': {'userid': '1'}} # note lowercased key
```


Discussion:
Feel free to send a pull request

Resolving patch:
diff --git a/opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py b/opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py
--- a/opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py
@@ -93,7 +93,7 @@ def extract(
                 _logger.warning("Invalid baggage entry: `%s`", entry)
                 continue
 
-            name = unquote_plus(name).strip().lower()
+            name = unquote_plus(name).strip()
             value = unquote_plus(value).strip()
 
             context = set_baggage(


Test patch:
diff --git a/opentelemetry-api/tests/baggage/propagation/test_propagation.py b/opentelemetry-api/tests/baggage/propagation/test_propagation.py
new file mode 100644
--- /dev/null
+++ b/opentelemetry-api/tests/baggage/propagation/test_propagation.py
@@ -0,0 +1,39 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# type: ignore
+
+from unittest import TestCase
+
+from opentelemetry.baggage import get_baggage, set_baggage
+from opentelemetry.baggage.propagation import W3CBaggagePropagator
+
+
+class TestBaggageManager(TestCase):
+    def test_propagate_baggage(self):
+        carrier = {}
+        propagator = W3CBaggagePropagator()
+
+        ctx = set_baggage("Test1", "value1")
+        ctx = set_baggage("test2", "value2", context=ctx)
+
+        propagator.inject(carrier, ctx)
+        ctx_propagated = propagator.extract(carrier)
+
+        self.assertEqual(
+            get_baggage("Test1", context=ctx_propagated), "value1"
+        )
+        self.assertEqual(
+            get_baggage("test2", context=ctx_propagated), "value2"
+        )