Bayesian Network Structure Learning with Integer Programming: Polytopes, Facets, and Complexity