Make Approx::operator() const to fix #2273 for 2.x
## Description
Backport @horenmar's fix for 2.x branch

## GitHub Issues
#2273

{"label": "catchorg:v2.x", "ref": "v2.x", "sha": "85c9544fa4c9625b9656d9bd765e54f8e639287f"}
**Describe the bug**

The `Approx` type has an overload of `template <typename T, ...SFINAE...> Approx operator()(T const&)` which (correct me if I'm wrong) is meant to be a factory function for instances that have the same epsilon, margin, and scale, but that use the passed value. 

AFAICT this should be const on the instance, but it's not.

Minimum failing example:
```C++
#include <catch2/catch.hpp>

TEST_CASE("Approx factory is const-correct") {
  // Set up a template Approx with problem-specific margin, etc.
  Approx const apprx = Approx(0.0).margin(1e-6);
  double value = 1.0;
  // Use template in assertions
  REQUIRE(value == apprx(1.0));
}
```

**Expected behavior**
Above test compiles, runs and passes.

**Reproduction steps**
See above.

**Platform information:**
 - OS: RHEL 8
 - Compiler+version: GCC 8.2.0
 - Catch version: 2.13.6


**Additional context**
Add any other context about the problem here.

Approx::operator() not const-correct
diff --git a/include/internal/catch_approx.h b/include/internal/catch_approx.h
index 4522e5ad70..2d12efe406 100644
--- a/include/internal/catch_approx.h
+++ b/include/internal/catch_approx.h
@@ -33,7 +33,7 @@ namespace Detail {
         Approx operator-() const;
 
         template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
-        Approx operator()( T const& value ) {
+        Approx operator()( T const& value ) const {
             Approx approx( static_cast<double>(value) );
             approx.m_epsilon = m_epsilon;
             approx.m_margin = m_margin;

diff --git a/projects/SelfTest/UsageTests/Approx.tests.cpp b/projects/SelfTest/UsageTests/Approx.tests.cpp
index 4029223a2b..6280599ef7 100644
--- a/projects/SelfTest/UsageTests/Approx.tests.cpp
+++ b/projects/SelfTest/UsageTests/Approx.tests.cpp
@@ -212,4 +212,11 @@ TEST_CASE( "Comparison with explicitly convertible types", "[Approx]" )
 
 }
 
+TEST_CASE("Approx::operator() is const correct", "[Approx][.approvals]") {
+  const Approx ap = Approx(0.0).margin(0.01);
+
+  // As long as this compiles, the test should be considered passing
+  REQUIRE(1.0 == ap(1.0));
+}
+
 }} // namespace ApproxTests

{"randomtestordering": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "libidentitytest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warnaboutnotests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unmatchedoutputfilter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtags": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "runtests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::simplespecs": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "notest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "regressioncheck-1670": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection::generatorsdontcauseinfiniteloop-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::escapespecialcharacters": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::invalidtestnames-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filenameastagstest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "approvaltests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "escapespecialcharactersintestnames": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::invalidtestnames-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "noassertions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "versioncheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtestnamesonly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection::generatorsdontcauseinfiniteloop-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listreporters": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"randomtestordering": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "libidentitytest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warnaboutnotests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unmatchedoutputfilter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtags": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "runtests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::simplespecs": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "notest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "regressioncheck-1670": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection::generatorsdontcauseinfiniteloop-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::escapespecialcharacters": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::invalidtestnames-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filenameastagstest": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "approvaltests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "escapespecialcharactersintestnames": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testsinfile::invalidtestnames-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "noassertions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection-1": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "versioncheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listtestnamesonly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filteredsection::generatorsdontcauseinfiniteloop-2": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "listreporters": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 24, "failed_count": 0, "skipped_count": 0, "passed_tests": ["randomtestordering", "libidentitytest", "unmatchedoutputfilter", "listtags", "notest", "approvaltests", "escapespecialcharactersintestnames", "testsinfile::invalidtestnames-2", "noassertions", "filteredsection::generatorsdontcauseinfiniteloop-2", "listreporters", "listtestnamesonly", "warnaboutnotests", "runtests", "testsinfile::simplespecs", "listtests", "regressioncheck-1670", "testsinfile::escapespecialcharacters", "filteredsection-2", "testsinfile::invalidtestnames-1", "filenameastagstest", "filteredsection-1", "versioncheck", "filteredsection::generatorsdontcauseinfiniteloop-1"], "failed_tests": [], "skipped_tests": []}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 24, "failed_count": 0, "skipped_count": 0, "passed_tests": ["randomtestordering", "libidentitytest", "unmatchedoutputfilter", "listtags", "notest", "approvaltests", "escapespecialcharactersintestnames", "testsinfile::invalidtestnames-2", "noassertions", "filteredsection::generatorsdontcauseinfiniteloop-2", "listreporters", "listtestnamesonly", "warnaboutnotests", "runtests", "testsinfile::simplespecs", "listtests", "regressioncheck-1670", "testsinfile::escapespecialcharacters", "filteredsection-2", "testsinfile::invalidtestnames-1", "filenameastagstest", "filteredsection-1", "versioncheck", "filteredsection::generatorsdontcauseinfiniteloop-1"], "failed_tests": [], "skipped_tests": []}