"kpm pack" identifies source files outside of project root and packs them

parent #570 

The original implementation only packs source files inside project root dir. In this PR, if a source file is out of project root dir but in the solution dir, we pack it as well.
Instead of just 3 tests, I would use theories and have a bit more cases.

```C#
[Theory]
[InlineData("../basedir", "childfile", false)]
public void VerifyChildDirectory(string baseDir, string file, bool isChild)
{
    Assert.True(PathUtility.IsChildOfDirectory(baseDir, childPath));
}
```