Novel Algorithms for Computational Protein Design, with Applications to Enzyme Redesign and Small-Molecule Inhibitor Design