Don't check for duplicate ids in cpp domain.
Add extra function overload example

For some reason this single argument overloaded function reveals a bug
that the more complex examples do not. Thanks to vitaut for providing
it.
Clean up domain handler creation logic

Use the cleaner dict.get(key, default) rather than the somewhat ugly try
and except blocks.
Run flake8 over domain.py file

And fix any issues.
Make options explicit argument of render helper

The render helper on the BaseDirective previously just used
'self.options' directly. Here we change it to accept an 'options'
argument so that we can determine what options to pass in.

In all but one of the cases we pass in self.options, but for the text
rendering for function matching we pass in a custom options dictionary
which contains 'no-link' and so it doesn't attempt to use the domain
handlers and create or duplicate check links for the text rendering.
This means there aren't already entries in the duplicate cache when we
come to render the actual functions and so we get the appropriate
target nodes in the output.

This is still not perfect as we can't handle overloaded functions but
then we couldn't before. This should fix the linking bugs introduced
when the text renderer approach to function matching was implemented.
Restore the duplicate checking in the domain helper

As we have fixed the source of the problem by not doing any linking in
the text rendering for the function matching.
Merge branch 'duplicate-targets'