Add "kpm install" command

- "kpm install" accepts all arguments & options that "kpm restore" and "kpm
  add" accept
- Refactor "kpm restore" command to make it easier to be invoked by "kpm
  install"
- Add utility method to read solution settings

parent #201 

Here is the usage of "kpm install":
```
Usage: kpm install [arguments] [options]

Arguments:
  [name]     Name of the dependency to add
  [version]  Version of the dependency to add, default is the latest version.
  [project]  Path to project, default is current directory

Options:
  -s|--source <FEED>          A list of packages sources to use for this command
  -f|--fallbacksource <FEED>  A list of packages sources to use as a fallback
  -p|--proxy <ADDRESS>        The HTTP proxy to use when retrieving packages
  --no-cache                  Do not use local cache
  --packages                  Path to restore packages
  -?|-h|--help                Show help information
```
Because we need the result immediately after `FindLatestVersion` returns. So I didn't see any benefit of making `FindLatestVersion` async. Do we always make async calls as much as possible?