public static IEnumerable <PropertyWithComponent> Flat(string flatPropertyName, object source, Func <string, PropertyInfo, bool> match, StringComparison comparison)
    {
        var trails = TrailFinder.GetTrails(flatPropertyName, source.GetType().GetProps(), match, comparison).Where(o => o != null);

        return(trails.Select(trail => TunnelierCustom.GetValue(trail, source)));
    }
    public static IEnumerable <PropertyWithComponent> Unflat(string flatPropertyName, object target, Func <string, PropertyInfo, bool> match, StringComparison comparison)
    {
        var trails = TrailFinder.GetTrails(flatPropertyName, target.GetType().GetProps(), match, comparison, false).Where(o => o != null);

        return(trails.Select(trail => TunnelierCustom.Digg(trail, target)));
    }