An Introduction to Riemann Surfaces, Algebraic Curves and Moduli Spaces