asio: Allow mutable lambdas + small cleanup

There are many cases in which we want to have a mutable
capture so that the lambda takes over the parameter and
we can modify it after the async callback. By making the
top level lambda mutable, the users callback can be mutable.

Also remove a couple references to experimental and a copy
that I saw when I was fixing this issue.

Tested: Added test and made sure that refish which uses
many async_method_calls still worked fine

Change-Id: Ifb1f9d8b9217187799e2defe429e76a937297ca1
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/example/asio-example.cpp b/example/asio-example.cpp
index f04af3f..f7ec6b0 100644
--- a/example/asio-example.cpp
+++ b/example/asio-example.cpp
@@ -339,10 +339,13 @@
         "xyz.openbmc_project.ObjectMapper", "GetSubTree",
         "/org/openbmc/control", 2, std::vector<std::string>());
 
+    std::string nonConstCapture = "lalalala";
     conn->async_method_call(
-        [](boost::system::error_code ec,
-           const std::vector<std::string>& things) {
+        [nonConstCapture = std::move(nonConstCapture)](
+            boost::system::error_code ec,
+            const std::vector<std::string>& things) mutable {
             std::cout << "async_method_call callback\n";
+            nonConstCapture += " stuff";
             if (ec)
             {
                 std::cerr << "async_method_call expected failure: " << ec
@@ -350,7 +353,7 @@
             }
             else
             {
-                std::cerr << "asyn_method_call should have faild!\n";
+                std::cerr << "async_method_call should have failed!\n";
             }
         },
         "xyz.openbmc_project.ObjectMapper",