Undulators, Wigglers and Their Applications