Revamped the UI workflow to support a pipeline

Main is responsible for coordinating the steps, and each step is responsible for transforming its input to output.
Each step is its own class which extends JPanel so that each step can get user input and display progress.