Multi-Packet Communication in 802.11 Networks by Spatial Reuse: from Theory to Protocol