Faits: A. Le 3 avril 2008, A._ a déposé une plainte pénale pour viol contre son voisin, X._. Ce dernier aurait sonné à sa porte dans la nuit du 2 au 3 avril 2008, puis l'aurait saisie au visage, lui plaquant une main sur la bouche; il l'aurait ensuite contrainte à s'agenouiller puis pénétrée vaginalement avant de rentrer chez lui. X._ a été interpellé le 4 avril 2008 et placé en détention préventive. Il a nié les accusations portées contre lui et déclaré avoir entretenu un acte sexuel librement consenti avec la plaignante dans son appartement. Le 20 mai 2008, X._ a sollicité sa mise en liberté provisoire avec effet immédiat. Par ordonnance du 23 mai 2008, le Juge d'instruction de l'arrondissement du Nord vaudois a écarté cette requête. Le Tribunal d'accusation du Tribunal cantonal du canton de Vaud (ci-après: le Tribunal cantonal) a confirmé cette décision au terme d'un arrêt rendu le 3 juillet 2008 sur recours du prévenu. Il a estimé que les présomptions de culpabilité étaient suffisantes et que la détention s'imposait en raison d'un risque concret et élevé de récidive. B. Agissant par la voie du recours en matière pénale, X._ demande au Tribunal fédéral principalement de réformer cet arrêt en ce sens que sa mise en liberté provisoire est immédiatement ordonnée et subsidiairement de l'annuler. Il requiert l'assistance judiciaire. Le Tribunal cantonal se réfère aux considérants de son arrêt. Le Procureur général du canton de Vaud conclut au rejet du recours. Invité à répliquer, X._ a persisté dans les conclusions de son recours.