\SMW\Factbox + \SMW\FactboxPresenter

Factbox logic has not been altered (aside from making the
interface somewhat sane) but as part of the process to improve
testability several functions that were tightly coupled with
hook execution have been moved into seperate classes to keep
diluting of responsibilities at a minimum. The current split is
following:

SMW\Factbox
Code coverage: 100%
CRAP: 32 (before 78.46)

SMW\FactboxPresenter
Code coverage: 100%
CRAP: 18

SMW\OutputPageParserOutput
Test coverage: 100%
CRAP: 5

SMW\SkinAfterContent
Test coverage: 100%
CRAP: 3

## Narative

+ Move to SMW\Factbox
+ Eliminate all static methods
+ Re-group code for readability
+ Move hook related code
+ Table formatting has been moved to an extra TableFormatter class to
decouple data capturing from formatting

+ Introduces smwgFactboxUseCache in order for onOutputPageParserOutput()
to fetch factbox text from cache instead of regenerating content on each
page request. If smwgFactboxUseCache = true only after a page received a new
revision (after it is saved) the factbox content will be re-parsed.
This enables pages to serve content faster, consume less memory and
work more efficient.

The Profiler showed two issues when executing onOutputPageParserOutput()
without cache, depending on how many properties/values are assigned it
takes considerable amount of time identifying properties/values
plus the additional text parsing that is needed to convert the text
into an output representation.

Name                                         Calls         Total          Each             %       Mem

Non-cached
SMWHooks::onOutputPageParserOutput                1       461.743       461.743         9.946%    184492  (      461.743 -      461.743) [872]
Parser::parse-SMWHooks::onOutputPageParserOutput  1       374.598       374.598         8.069%     57957  (      374.598 -      374.598) [806]

Cached
SMWHooks::onOutputPageParserOutput                1        27.051        27.051         0.859%    168323  (       27.051 -       27.051) [2]

Using the cache also shields against the loss of data attached to the
outputpage object which is responsible that on some occasions the factbox
disappears and only after a page purge (as the data are re-attached to
the outputpage) appears again.

+ Introduces smwgFactboxCacheRefreshOnPurge which will force the cache
to be purged after an action=purge event otherwise only a save
event will invalidate  the factbox cache object.

## Bugs

Bug: 23185 ought to be solved by using Sanitizer::removeHTMLtags for
some tags that can lead to a breakage

Bug: 38809 In cases where factbox content could not be retrieved
from the output object use the real cache to find an appropriate
content

Change-Id: I5eb8a3e648aa4a4610882776cb6c469a48f88ffc