Synchronization: From Coupled Systems to Complex Networks