Tailoring surface codes: Improvements in quantum error correction with biased noise