Interference Alignment: Capacity Bounds And Practical Algorithms For Time-Varying Channels