Closes #11889.
## Abstract
Private functions are isolated to the specific contract they are defined in. This holds true during inheritance as well. A contract that inherits another contract cannot use or access private functions from the parent contract. In cases where a contract inherits two separate contracts that each contain the same private function name, there should be no compilation error due to naming conflicts.
## Motivation
Because inheriting contracts cannot use or access the private functions of parent contracts, enforcing uniqueness of these private function names is unnecessarily restrictive.
An example of how this can happen is explained here
## Specification
-
Update the ambiguous overrides checking function in OverrideChecker to track the scope of functions when comparing them for uniqueness.
-
Write tests for that case here
## Backwards Compatibility
This change makes solidity compilation strictly more permissive and should not introduce any incompatibilities with existing contracts.