pkg/plugins: some cleaning up (step 1)
More collateral damage of things I was working on 😂 

### pkg/plugins: move Plugin.ScopedPath to platform-agnostic file

Since 0e5eaf8ee32662182147f5f62c1bfebef66f5c47, these implementations
were fully identical, so removing the duplicate, and move it to a
platform-agnostic file.

### plg/plugins: rename vars that collided, or poorly cased

Reduce some noise while reading the code in my IDE :)

### pkg/plugins: inline rootless paths, split exported from implementation

inline the rootlessConfigPluginsPath and rootlessLibPluginsPath funcs,
and split the exported SpecsPaths from the platform-specific implementations,
so that documentation can be maintained in a single location.


### pkg/plugins: remove LocalRegistry.SpecsPaths()

This field was exported, but never mutated outside of the package, and
effectively a rather "creative" way to define a method on LocalRegistry.

While un-exporting also store these paths in a field, instead of constructing
them on every call, as the results won't change during the lifecycle of the
LocalRegistry.


### pkg/plugins/transport: inline newHTTPRequest

It was only used in a single location; just inline the code


### pkg/plugins/transport: export httpTransport, and return concrete type

Make NewHTTPTransport return a concrete type.

### pkg/plugins/transport: remove unused Transport interface

The interface is not consumed anywhere, and only non-exported functions
produced one, so we can remove it.

### pkg/plugins/transport: remove RequestFactory interface

The client's transport can only be set by newClientWithTransport, which
is not exported, and always uses a transport.HTTPTransport.

However, requestFactory is mocked in one of the tests, so keep the interface,
but make it a local, non-exported one.


### pkg/plugins: remove "load()" function

It was used in a single place and was abstracting "loadWithRetry";
let's just inline it.


### pkg/plugins: make package-level socketsPath var a LocalRegistry field

This variable was only accessed from within LocalRegistry methods, but
due to being a package-level variable, tests had to deal with setting
and resetting it.

Move it to be a field scoped to the LocalRegistry. This simplifies the
tests, and to make this more transparent, also removing the "Setup()"
helper (which, wasn't marked as a t.Helper()).

### pkg/plugins: TestGet(): use sub-tests

**- A picture of a cute animal (not mandatory but encouraged)**


pkg/plugins/discovery_unix.go
//go:build !windows

package plugins // import "github.com/docker/docker/pkg/plugins"
import (
	"path/filepath"

	"github.com/docker/docker/pkg/homedir"
	"github.com/docker/docker/pkg/rootless"
)

func rootlessConfigPluginsPath() string {
	configHome, err := homedir.GetConfigHome()
	if err == nil {
		return filepath.Join(configHome, "docker/plugins")
	}

	return "/etc/docker/plugins"
}

func rootlessLibPluginsPath() string {
	libHome, err := homedir.GetLibHome()
	if err == nil {
		return filepath.Join(libHome, "docker/plugins")
	}

	return "/usr/lib/docker/plugins"
}

// SpecsPaths returns
// { "%programdata%\docker\plugins" } on Windows,
// { "/etc/docker/plugins", "/usr/lib/docker/plugins" } on Unix in non-rootless mode,
// { "$XDG_CONFIG_HOME/docker/plugins", "$HOME/.local/lib/docker/plugins" } on Unix in rootless mode
// with fallback to the corresponding path in non-rootless mode if $XDG_CONFIG_HOME or $HOME is not set.
func SpecsPaths() []string {
	if rootless.RunningWithRootlessKit() {
		return []string{rootlessConfigPluginsPath(), rootlessLibPluginsPath()}
	}

	return []string{"/etc/docker/plugins", "/usr/lib/docker/plugins"}
}

//go:build !windows

package plugins // import "github.com/docker/docker/pkg/plugins"
import (
	"path/filepath"

	"github.com/docker/docker/pkg/homedir"
	"github.com/docker/docker/pkg/rootless"
)

func rootlessConfigPluginsPath() string {
	if configHome, err := homedir.GetConfigHome(); err != nil {
		return filepath.Join(configHome, "docker/plugins")
	}
	return "/etc/docker/plugins"
}

func rootlessLibPluginsPath() string {
	if libHome, err := homedir.GetLibHome(); err == nil {
		return filepath.Join(libHome, "docker/plugins")
	}
	return "/usr/lib/docker/plugins"
}

// specsPaths is the non-Windows implementation of [SpecsPaths].
func specsPaths() []string {
	if rootless.RunningWithRootlessKit() {
		return []string{rootlessConfigPluginsPath(), rootlessLibPluginsPath()}
	}
	return []string{"/etc/docker/plugins", "/usr/lib/docker/plugins"}
}

Ah, yes, I can drop this for now. I was going back-and-forth a bit on this one, and I was considering to propose "perhaps we should always prepend the XDG dirs before system-wide paths"

As part of that, I had this; 

```go
// specsPaths is the non-Windows implementation of [SpecsPaths].
func specsPaths() []string {
	var paths []string
	if configHome, err := homedir.GetConfigHome(); err == nil {
		paths = append(paths, filepath.Join(configHome, "docker/plugins"))
	}
	if libHome, err := homedir.GetLibHome(); err == nil {
		paths = append(paths, filepath.Join(libHome, "docker/plugins"))
	}
	return append(paths, "/etc/docker/plugins", "/usr/lib/docker/plugins")
}
```

But then decided to keep that for later, which is how I ended up with the variant here.

I'll revert that part for now, and leave that for a later discussion.