Fixing check get_path bug.

BaseCheck::get_path() checks to see if the scanner is an instanceof
`ThemeScanner` but this is not correct as its parent class
`DirectoryScanner` actually implements the `get_path()` function.

Changing the BaseCheck::get_path() function to look for subclasses of
`DirectoryScanner`.
Adding infrastructure for async scanning.

The `VIP_Scanner_Async` class sets up a number of interfaces for
performing scans in an async manner. It exposes a couple of AJAX methods,
and a cron scan. All scans done through the async scanner have their
results cached.

The `VIP_Scanner_Async` class also adds an admin bar node displaying the
number of issues in the last theme review.

Note that reviews done by normal means (going to the VIP Scanner page)
don't yet get their results cached. This is a todo.

See: #73
Adding VIP Scanner Async JS.

This provides a JS api for interacting with and parsing the results of the
VIP Scanner AJAX API.
Colourizing admin bar scan results.

Scan results will now be colourized based on the errors in the results.
Red if there are blockers, orange if there are warnings, and green if
everything is okay or there are notes.
Modifying async to be compatible with multiple different scans.

Currently the way that scan results are cached in the async scanner is
only compatible with running a single review on a single theme. In the
future we want to support the ability to scan a number of things with
different reviews as needed. This change makes the caching side of the
async scanner compatible with that goal.

As a result of how results are saved, the ajax api was also changed to
only give a summary of the current results. This is most meaninful in the
above scenario.

Additional logic will need to be added at a later date for meaningful ajax
apis when the scenario is implemented.

See #73
Adding filter to update cached scans on manual scan.

Added a `vip_scanner_pre/post_theme_review` filter to
`VIP_Scanner::run_theme_review()` that is used by VIP_Scanner_Async to
grab the result of a manual scan and cache it.

This way the async results stay up to date with manual scan results.
Adding async scanner results as a post meta.

The would not have been properly stored in the post body.
Merge pull request #103 from Mobius5150/async_scanning

Async scanning infrastructure