Repository: dstl/stone-soup
Issue: RecursionError when trying to print/debug Track objects

When trying to print StoneSoup objects that recursively contain a large number of other objects (e.g. `Tracks`), or debugging scripts that contain such objects, a RecursionError is thrown, e.g.:

``` 
Traceback (most recent call last):
  File "C:\\Program Files\\JetBrains\\PyCharm 2023.1\\plugins\\python\\helpers\\pydev\\pydevd.py", line 2195, in <module>
    main()
  File "C:\\Program Files\\JetBrains\\PyCharm 2023.1\\plugins\\python\\helpers\\pydev\\pydevd.py", line 2177, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\\Program Files\\JetBrains\\PyCharm 2023.1\\plugins\\python\\helpers\\pydev\\pydevd.py", line 1489, in run
    return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)
  File "C:\\Program Files\\JetBrains\\PyCharm 2023.1\\plugins\\python\\helpers\\pydev\\pydevd.py", line 1496, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\\Program Files\\JetBrains\\PyCharm 2023.1\\plugins\\python\\helpers\\pydev\\_pydev_imps\\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\\n", file, 'exec'), glob, loc)
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\examples\\recursion_error_example.py", line 153, in <module>
    print(track)
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\stonesoup\\base.py", line 457, in __repr__
    rep = Base._repr.whitespace_remove(max_len_whitespace, value)
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\stonesoup\\base.py", line 248, in whitespace_remove
    return cls.whitespace_remove(maxlen_whitespace, val)
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\stonesoup\\base.py", line 248, in whitespace_remove
    return cls.whitespace_remove(maxlen_whitespace, val)
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\stonesoup\\base.py", line 248, in whitespace_remove
    return cls.whitespace_remove(maxlen_whitespace, val)
  [Previous line repeated 986 more times]
  File "C:\\Users\\sglvladi\\Workspace\\GitHub\\Stone-Soup-tmp\\stonesoup\\base.py", line 239, in whitespace_remove
    @classmethod
RecursionError: maximum recursion depth exceeded while calling a Python object
```

This seems to happen because of a recursive call to the `BaseRepr.whitespace_remove()` method (see [here](https://github.com/dstl/Stone-Soup/blob/923d3bee913c7215af4cd78b1b6c697bc9bd74e7/stonesoup/base.py#L248)).

A script that demonstrates this error can be found [here](https://gist.github.com/A-acuto/e05a3a8780491a5f5773e246f6fa89e7).

Changed files:
stonesoup/base.py

diff --git a/stonesoup/base.py b/stonesoup/base.py
index 8e1c7778..e930a1b5 100644
--- a/stonesoup/base.py
+++ b/stonesoup/base.py
@@ -241,13 +241,10 @@ class BaseRepr(Repr):
         """Remove excess whitespace, replacing with ellipses"""
         large_whitespace = ' ' * (maxlen_whitespace+1)
         fixed_whitespace = ' ' * maxlen_whitespace
-        if large_whitespace in val:
-            excess = val.find(large_whitespace)  # Find the excess whitespace
+        while excess := val.find(large_whitespace) != -1:   # Find the excess whitespace, if any
             line_end = ''.join(val[excess:].partition('\\n')[1:])
             val = ''.join([val[0:excess], fixed_whitespace, '...', line_end])
-            return cls.whitespace_remove(maxlen_whitespace, val)
-        else:
-            return val
+        return val
 
 
 class BaseMeta(ABCMeta):