* Move `filterIP` from `hosts.go` to `dnscommon.go`
* Implement adding pools for fakedns.HolderMulti
* Implement per-client fakedns for DNS app
* Remove `dns.ClientWithIPOption` and replace with new programming model
* Implement JSON config support for new fakedns config
* Fix lint and tests
* Fix some codacy analysis
Turn off fake DNS for request sent from Routing and Freedom outbound.
Fake DNS now only apply to DNS outbound.
This is important for Android, where VPN service take over all system DNS
traffic and pass it to core. "UseIp" option can be used in Freedom outbound
to avoid getting fake IP and fail connection.
Co-authored-by: loyalsoldier <10487845+Loyalsoldier@users.noreply.github.com>