PartIR: Composing SPMD Partitioning Strategies for Machine Learning