Error suppression and error correction in adiabatic quantum computation I: techniques and challenges