### 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
ERR_FAIL_INDEX_V(p_layer, (int)layers.size(), Vector<int>());
	
	const HashMap<Vector2i, TileMapCell> &tile_map = layers[p_layer].tile_map;
	Vector<int> tile_data;
	tile_data.resize(tile_map.size() * 3);
	int *w = tile_data.ptrw();
	
	int idx = 0;
	for (const KeyValue<Vector2i, TileMapCell> &E : tile_map) {
		uint8_t *ptr = (uint8_t *)&w[idx];
		encode_uint16((int16_t)(E.key.x), &ptr[0]);
		encode_uint16((int16_t)(E.key.y), &ptr[2]);
		encode_uint16(E.value.source_id, &ptr[4]);
		encode_uint16(E.value.coord_x, &ptr[6]);
		encode_uint16(E.value.coord_y, &ptr[8]);
		encode_uint16(E.value.alternative_tile, &ptr[10]);
		idx += 3;
	}
	return tile_data;
}
void TileMap::_build_runtime_update_tile_data(SelfList<TileMapQuadrant>::List &r_dirty_quadrant_list) {
	if (GDVIRTUAL_IS_OVERRIDDEN(_use_tile_data_runtime_update) && GDVIRTUAL_IS_OVERRIDDEN(_tile_data_runtime_update)) {
		SelfList<TileMapQuadrant> *q_list_element = r_dirty_quadrant_list.first();
		while (q_list_element) {
			TileMapQuadrant &q = *q_list_element->self();
			
			for (const KeyValue<Vector2i, Vector2i> &E_cell : q.local_to_map) {
				TileMapCell c = get_cell(q.layer, E_cell.value, true);
				TileSetSource *source;
				if (tile_set->has_source(c.source_id)) {