Simplify tests by replacing output capture with asserts where possible

The C++ part of the test code is modified to achieve this. As a result,
this kind of test:

```python
with capture:
    kw_func1(5, y=10)
assert capture == "kw_func(x=5, y=10)"
```

can be replaced with a simple:

`assert kw_func1(5, y=10) == "x=5, y=10"`
diff --git a/tests/test_numpy_vectorize.py b/tests/test_numpy_vectorize.py
index 6fcf808..73da819 100644
--- a/tests/test_numpy_vectorize.py
+++ b/tests/test_numpy_vectorize.py
@@ -59,18 +59,12 @@
 
 
 @pytest.requires_numpy
-def test_type_selection(capture):
+def test_type_selection():
     from pybind11_tests import selective_func
 
-    with capture:
-        selective_func(np.array([1], dtype=np.int32))
-        selective_func(np.array([1.0], dtype=np.float32))
-        selective_func(np.array([1.0j], dtype=np.complex64))
-    assert capture == """
-        Int branch taken.
-        Float branch taken.
-        Complex float branch taken.
-    """
+    assert selective_func(np.array([1], dtype=np.int32)) == "Int branch taken."
+    assert selective_func(np.array([1.0], dtype=np.float32)) == "Float branch taken."
+    assert selective_func(np.array([1.0j], dtype=np.complex64)) == "Complex float branch taken."
 
 
 @pytest.requires_numpy