Refactor command-line parser

parent #113 

1. Add CommandOptionType in CommandLineApplication parser
2. One option can have multiple values in CommandLineApplication now
3. Add helper methods that generate help information in CommandLineApplication
4. Replace all usages of CommandLineParser with CommandLineApplication parser