Although splinter has a [zope.testbrowser] extras, we can not use the extras because it installs lxml / cssselect with versions incompatible to those pinned by Plone KGS . Therefore directly declare the dependencies and let the KGSs do the version pinning job.  http://dist.plone.org/release/4.3-latest/versions.cfg
Otherwise the reference needs to be passed, which is annoying.
The problem is that the z2.zopeApp context manager commits and there is somewhere a commit event handler resetting the site hook. Therefore we use the acquisition to get the zope app.
The imports of Products.CMFPlone.tests.utils (from which MockMailHost is imported) implicitly import the CMFPlone patches. Since this import happens on test discovery this can cause that certain content types cannot be created (the factory is missing). Therefore those imports should be inside the function and not globally, so that they are triggered by the testing layer at the right moment.