Frameworks for the Design of Reusable Parallel and Distributed Metaheuristics