A Semi-Implicit Projection Algorithm for the Navier-Stokes Equations with Application to Flows in Complex Geometries