Evolution in heterogeneous environments