### 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
int quad_size = get_effective_quadrant_size(p_layer);
	
	return Vector2i(
			p_coords.x > 0 ? p_coords.x / quad_size : (p_coords.x - (quad_size - 1)) / quad_size,
			p_coords.y > 0 ? p_coords.y / quad_size : (p_coords.y - (quad_size - 1)) / quad_size);
}
HashMap<Vector2i, TileMapQuadrant>::Iterator TileMap::_create_quadrant(int p_layer, const Vector2i &p_qk) {
	ERR_FAIL_INDEX_V(p_layer, (int)layers.size(), nullptr);
	TileMapQuadrant q;
	q.layer = p_layer;
	q.coords = p_qk;
	rect_cache_dirty = true;
	
	RenderingServer *rs = RenderingServer::get_singleton();
	q.debug_canvas_item = rs->canvas_item_create();
	rs->canvas_item_set_z_index(q.debug_canvas_item, RS::CANVAS_ITEM_Z_MAX - 1);
	rs->canvas_item_set_parent(q.debug_canvas_item, get_canvas_item());
	
	if (tile_set.is_valid()) {
		_rendering_create_quadrant(&q);
	}
	return layers[p_layer].quadrant_map.insert(p_qk, q);
}
void TileMap::_make_quadrant_dirty(HashMap<Vector2i, TileMapQuadrant>::Iterator Q) {