### Godot version

v4.0.beta11.official [91713ced8]

### System information

MX Linux 21

### Issue description

In Godot 3, TileMap had methods get_used_cells() and get_used_cells_by_id(). Godot 4's TileMap only has get_used_cells() and is missing get_used_cells_by_id().

get_used_cells_by_id() is highly useful in multiple cases, for example when trying to get all cells that are of road type, to randomly spawn a car.

Re-implementing get_used_cells_by_id() should be simple. The method could simply call get_used_cells(), and ignore all cells that are of the wrong ID.

### Steps to reproduce

N/A

### Minimal reproduction project

N/A
for (const TerrainConstraint &E_constraint : dummy_constraints) {
		HashMap<int, int> terrain_count;
		
		HashMap<Vector2i, TileSet::CellNeighbor> overlapping_terrain_bits = E_constraint.get_overlapping_coords_and_peering_bits();
		for (const KeyValue<Vector2i, TileSet::CellNeighbor> &E_overlapping : overlapping_terrain_bits) {
			TileData *neighbor_tile_data = nullptr;
			TileMapCell neighbor_cell = get_cell(p_layer, E_overlapping.key);
			if (neighbor_cell.source_id != TileSet::INVALID_SOURCE) {
				Ref<TileSetSource> source = tile_set->get_source(neighbor_cell.source_id);
				Ref<TileSetAtlasSource> atlas_source = source;
				if (atlas_source.is_valid()) {
					TileData *tile_data = atlas_source->get_tile_data(neighbor_cell.get_atlas_coords(), neighbor_cell.alternative_tile);
					if (tile_data && tile_data->get_terrain_set() == p_terrain_set) {
						neighbor_tile_data = tile_data;
					}
				}
			}
			int terrain = neighbor_tile_data ? neighbor_tile_data->get_terrain_peering_bit(TileSet::CellNeighbor(E_overlapping.value)) : -1;
			if (!p_ignore_empty_terrains || terrain >= 0) {
				if (!terrain_count.has(terrain)) {
					terrain_count[terrain] = 0;
				}
				terrain_count[terrain] += 1;
			}
		}
		
		int max = 0;
		int max_terrain = -1;
		for (const KeyValue<int, int> &E_terrain_count : terrain_count) {
			if (E_terrain_count.value > max) {