I thought everything could go to the core actually. What interfaces should be in the API module?
We could start from simple (prehaps random and ordered?) round-robin, and then the weighted one. Just a simple one should be enough to prove the concept IMHO.
In a container, the core module will not be visible to the user's classloader; only the API will. So anything that we want to make available to the user must be in the API...
Alternately we could put it in core and expose an API for it in the standalone module classes (which would not be available in a container I guess; instead they would have to set up load-balancing in a configuration file).