Abstract cluster editing into own service

This allows for more fine grained unit testing and keeps the controller smaller, with the controller just primarily calling external services, and containing very little logic itself.