Capacity Approaching Coding Strategies for Machine-to-Machine Communication in IoT Networks