Modeling smooth flat edges along the curve
The idea about subsurf modifier is that you use fewer well positioned vertices in your lowpoly mesh and let the modifier smooth inbetween. You have unneeded polygons at some spots that hinder the smoothing, and at other spots you don't have enough detail in your mesh. 

Generally if you want a clean model you need to take more attention to topology. If you want to clean it (also for academic reasons) then search for "retopology", which is mostly used in creating a good lowpoly mesh for sculpted human faces.

You can also use sharp edges for more control about the subsurf modifier, very useful if you want some edges to stay unsmoothed without adding a lot of detail in the lowpoly mesh.