To be able to label incoming tor connections as different from normal localhost connections in e.g. `getpeerinfo` and the peers list in the GUI it'd be useful to have them connect on an alternative local-only port. Or even better, a UNIX socket.

For manually set-up hidden services this would have to be configured manually and could add a `hsport` option or such. The external port would still appear as `XXXXXXXXX.onion:8333`, however internally it would redirect to a that port.

In the case of `torcontrol` this would be easy to set up automatically. It could add a new (localhost) binding port automatically and this code would have to be changed:
- https://github.com/bitcoin/bitcoin/blob/master/src/torcontrol.cpp#L441
- https://github.com/bitcoin/bitcoin/blob/master/src/torcontrol.cpp#L477

*
 * @param maxsize Puts a maximum size limit on the file that is read. If the file is larger than this, truncated data
 *         (with len > maxsize) will be returned.
 */
static std::pair<bool,std::string> ReadBinaryFile(const fs::path &filename, size_t maxsize=std::numeric_limits<size_t>::max())
{
    FILE *f = fsbridge::fopen(filename, "rb");
    if (f == nullptr)
        return std::make_pair(false,"");
    std::string retval;
    char buffer[128];
    size_t n;
    while ((n=fread(buffer, 1, sizeof(buffer), f)) > 0) {
        
        
        if (ferror(f)) {
            fclose(f);
            return std::make_pair(false,"");
        }
        retval.append(buffer, buffer+n);
        if (retval.size() > maxsize)
            break;
    }
    fclose(f);
    return std::make_pair(true,retval);
}
/** Write contents of std::string to a file.
 * @return true on success.
 */
static bool WriteBinaryFile(const fs::path &filename, const std::string &data)