A direct-adjoint Lattice-Boltzmann solver for turbulent fluid-structure interaction and shape optimization