Repository: evidentlyai/evidently
Issue: TypeError: Object of type StatTest is not JSON serializable
Root cause: Validation Gap

executing the following code:
```
report = Report(
    metrics=[
        DataDriftPreset(
            stattest=wasserstein_stat_test,
            per_column_stattest_threshold={"feature_a": 0.1, "feature_b": 0.1},
        )
    ]
)

report.run(reference_data=df_reference, current_data=df_current)
report.save("evidently_snapshot.json")
```

resulted this error:
```
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_18711/418920026.py in <cell line: 1>()
----> 1 report.save('evidently_snapshot.json')

~/anaconda3/envs/python38/lib/python3.8/site-packages/evidently/suite/base_suite.py in save(self, filename)
    521     def save(self, filename):
    522         """Save state to file (experimental)"""
--> 523         self._get_snapshot().save(filename)
    524 
    525     @classmethod

~/anaconda3/envs/python38/lib/python3.8/site-packages/evidently/suite/base_suite.py in save(self, filename)
    447     def save(self, filename):
    448         with open(filename, "w") as f:
--> 449             json.dump(self.dict(), f, indent=2, cls=NumpyEncoder)
    450 
    451     @classmethod

~/anaconda3/envs/python38/lib/python3.8/json/__init__.py in dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    177     # could accelerate with writelines in some versions of Python, at
    178     # a debuggability cost
--> 179     for chunk in iterable:
    180         fp.write(chunk)
    181 

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode(o, _current_indent_level)
    429             yield from _iterencode_list(o, _current_indent_level)
    430         elif isinstance(o, dict):
--> 431             yield from _iterencode_dict(o, _current_indent_level)
    432         else:
    433             if markers is not None:

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode_list(lst, _current_indent_level)
    323                 else:
    324                     chunks = _iterencode(value, _current_indent_level)
--> 325                 yield from chunks
    326         if newline_indent is not None:
    327             _current_indent_level -= 1

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in _iterencode(o, _current_indent_level)
    436                     raise ValueError("Circular reference detected")
    437                 markers[markerid] = o
--> 438             o = _default(o)
    439             yield from _iterencode(o, _current_indent_level)
    440             if markers is not None:

~/anaconda3/envs/python38/lib/python3.8/site-packages/evidently/utils/numpy_encoder.py in default(self, o)
     43                 return python_type(o)
     44 
---> 45         return json.JSONEncoder.default(self, o)

~/anaconda3/envs/python38/lib/python3.8/json/encoder.py in default(self, o)
    177 
    178         """
--> 179         raise TypeError(f'Object of type {o.__class__.__name__} '
    180                         f'is not JSON serializable')
    181 

TypeError: Object of type StatTest is not JSON serializable
```


Evidently version: 0.4.4

Attaching the report (html and json) in case needed: 
[evidently_report.zip](https://github.com/evidentlyai/evidently/files/12623833/evidently_report.zip)