Pacti: Scaling Assume-Guarantee Reasoning for System Analysis and Design