Understanding Self-Assembly in Solution and at Interfaces Using All-Atom Molecular Dynamics Simulations and Enhanced Sampling Methods