Generative AI Design Patterns (Solutions to Common Challenges When Building GenAI Agents and Applications)