Flocking with Obstacle Avoidance: A New Distributed Coordination Algorithm Based on Voronoi Partitions