The pivot algorithm: A highly efficient Monte Carlo method for the self-avoiding walk