Place the potatoes in large pot and cover with salted cold water. The potatoes will soak up that salt like pasta and it will make a big difference in flavor. Cover and bring to a boil and cook until fork-tender, 20 to 30 minutes. Drain the potatoes, and return them to the same pot, allowing them to dry. Melt the butter with the half-and-half in a small saucepan over low heat. Add to the potatoes along with the cream cheese and season with salt and pepper. Smash with a potato masher and set aside, keeping warm until ready to serve.
Melt butter in a medium saucepan over medium heat, then add onions. Cook, stirring occasionally, until onions are translucent, about 5 minutes. Sprinkle the flour on the onions, stirring constantly, and cook until flour is golden to brown. Adjust heat so mixture does not burn.
Gradually whisk in 4 cups stock until mixture thickens and is smooth. If it is too thick, add liquid. Cool, cover and chill. When ready to serve, reheat mixture over low heat, stirring. Scrape bottom of turkey pan and add drippings or giblets to gravy. Taste and adjust seasoning, then serve. (makes 5-6 cups gravy)