entry.go
func (e *Entry) MergePatterns(patterns []string) *Entry {
	pat, size := PeekNextPattern(patterns)
	if child := e.getChildEntry(pat); child != nil {
		if len(patterns) == size {
			return child
		}
		return child.MergePatterns(patterns[size:])
	}
	return e.addPatterns(patterns)
}
func (e *Entry) MergePatterns(patterns []string) *Entry {
	pat, size := PeekNextPattern(patterns)
	if child := e.getChildEntry(pat); child != nil {
		if len(patterns) == size {
			return child
		}
		return child.MergePatterns(patterns[size:])
	}
	return e.addPatterns(patterns)
}
// MergePattern add entry patterns with given pattern strings. If a pattern
// already exists on the entry, it adds remaining patterns to the existing entry.