Controlling Colloidal Interactions For Nanoparticle Self-Assembly