I think addressing the cross-platform issue should involve creating per-hosttype service restart methods that will be used, but only if puppetservice is available--otherwise go to the fallthrough case of invoking the binary directly.