Fixed #286. Convert existing _format_report to the new format_report method.

The rationael behind is that the old one would require new signatures to be added.
The new one might be a bit ugly in terms of all the braces and brackets, but
usage wise it's pretty consistent and simple.
Merge pull request #290 from yeukhon/issue#286

Fixed #286. Convert existing _format_report to the new format_report method
Fixed #292. Update ServerDetailsPlugin to use the correct format_report.

I was still using the old non-class format_report I orginally wrote
for the CSPPlugin. This should have been part of #286, but I somehow
let it passed.
Merge pull request #293 from yeukhon/issue#292

Fixed #292. Update ServerDetailsPlugin to use the correct format_report.
Fixed #291. Added solution to various plugins.

Some issues in some plugins can benefit from having explicit solution/remdiation in the report output.
Merge pull request #294 from yeukhon/issue#291

Fixed #291. Added solution to various plugins.
Fixed #184. Refactor and re-implement all views functional tests.

This is a major patch.

First, there is a base class called Resource which is used to
create "shortcut" class to each of the backend's resource endpoint.
While it may be silly to create such class, as a test writer I find
this approach cleaner, more readable and easier to maintain than
the previous function-style.

Compare:

user = User("bob@example.org")
res = user.create()

to

res = self.create_user("bob@eample.org")

The class actually keeps certain "states" (at the attribute level).
Most of the classes have the same number of methods to access:

    create, get, update, delete

Secondly, when we actually test scan, we no longer run basics plugin,
which would require a mini Flask server to be running. Instead,
I am making use of DelayPlugin from tests plugin. However, this test
is turned off due to bug #296 (and #300). Until we fix those two,
that test will be commented out.

Third, test_key method is gone. When we want to check whether
the response contains keys we are expecting to have, we fall back
to the native self.assertEqual. We basically do this:

    self.assertEqual(set(key1),  set(key2))

where key1 and key2 are the set of keys we want to compare. While
doing this, I discovered that the original self._test_key method
contains a bug. We have added new keys to many responses but _test_key
did not catch the changes. With this new, more native approach,
I am able to detect the missing keys and this improve the realibitly of
our tests.

There are other changes, but in general this patch makes the tests
more robuts and easier to maintain.
Merge pull request #300 from yeukhon/issue#184

Fixed #184. Refactor and re-implement all views functional tests.
Fixed #296. In group creation, query site "url" not site "name".

We mistakenly query the wrong (and non-existient) attribute
in the sites collection. The correct name is "url", not "name".
Merge pull request #301 from yeukhon/issue#296

Fixed #296. In group creation, query site "url" not site "name".
Fixed #298. Handle non-existent plan in GET /plans/<plan_name>

If the plan does not exist, we should return False.
We should probably handle with a 404 in the future.
Merge pull request #302 from yeukhon/issue#298

Fixed #298. Handle non-existent plan in GET /plans/<plan_name>
Fixed #299. Added HelloWorldPlugin for testing purpose.

This is almost like DelayedPlugin except it does not wait.
We can turn this into a better testing plugin (the configuration
takes parameters, like configuring how many issues to return,
what strings to return, etc). But for now, this is enough for
testing.
Merge pull request #303 from yeukhon/issue#299

Fixed #299. Added HelloWorldPlugin for testing purpose.
Fixed #297. Allow to filter plans by passing email to the filter.

The issue occurs that we didn't pass the second argument the plan name
into _check_plan_by_email().

Though the code is not very efficient. See #304.
Merge pull request #305 from yeukhon/issue#297

Fixed #297. Allow to filter plans by passing email to the filter.