Mechanism Design for Heterogeneous and Distributed Facility Location Problems