Joint Source-Channel Coding: Fundamentals and Recent Progress in Practical Designs