pw_rpc: Use pw::IntrusiveList for services

Replace the ServiceRegistry and custom intrusive list logic with
pw::IntrusiveList.

Change-Id: Id2b01730593564d167795edd9506a9aa750b45a5
diff --git a/pw_rpc/public/pw_rpc/internal/service.h b/pw_rpc/public/pw_rpc/internal/service.h
index fb42585..7e5a96f 100644
--- a/pw_rpc/public/pw_rpc/internal/service.h
+++ b/pw_rpc/public/pw_rpc/internal/service.h
@@ -16,6 +16,7 @@
 #include <cstdint>
 #include <utility>
 
+#include "pw_containers/intrusive_list.h"
 #include "pw_rpc/internal/method.h"
 #include "pw_span/span.h"
 
@@ -23,7 +24,7 @@
 
 // Base class for all RPC services. This cannot be instantiated directly; use a
 // generated subclass instead.
-class Service {
+class Service : public IntrusiveList<Service>::Item {
  public:
   uint32_t id() const { return id_; }
 
@@ -33,14 +34,13 @@
  protected:
   template <typename T>
   constexpr Service(uint32_t id, T&& methods)
-      : id_(id), methods_(std::forward<T>(methods)), next_(nullptr) {}
+      : id_(id), methods_(std::forward<T>(methods)) {}
 
  private:
   friend class ServiceRegistry;
 
   uint32_t id_;
   span<const Method> methods_;
-  Service* next_;
 };
 
 }  // namespace pw::rpc::internal