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
```
`Enumerable.Max()` doesn't have an overload accepting a comparer. Also, I don't think making `PackageInfo` implement `IComparable` is good enough here. Comparing `PackageInfo` with only one of its property (`Version`) only works for the scenario here. Exposing this comparison to public may cause troubles later.

Can I encapsulate the max version look-up logic into a private method like this?
```c#
private static PackageInfo MaxByVersion(IEnumerable<PackageInfo> source)
{
  return source.Aggregate((acc, next) => next.Version > acc.Version ? next : acc);
}
```