Adjoint-based 3D Shape Optimization for Turbomachinery Applications