Support manual validation where needed, add unit tests.
This also slightly changes the behaviour of non-required field, since
an empty non-required field should be valid.
Don't re-validate if the entry has not changed. Add lost_focus and
changed signals that fire after validation has completed. Don't
re-validate host names if ony the port or scheme has changed.
This will fire when the user has activated the entry and validation
has completed, allowing use sites to hook up one place when waiting for
asyc validation (e.g. host name validation) to occur.