Plugin for test pages

After the refactoring this is the first pull request that allows using plugins, so far only to modify the content of a test page.

This is achieved by exposing some middlewares and adding the modules

- plugins where you can require a plugin from disk or npm
- testPage where you can add element into a test page

For testing purposes, this pull request introduces also an attester.dispose to cleanly dispose all objects created.

Conflicts:
	lib/attester/cli.js
	lib/test-type/aria-templates/at-test-type.js
	lib/test-type/base-test-type.js
	lib/test-type/mocha/mocha-test-type.js

Conflicts:
	lib/launchers/phantom.js
New logging level for socketio

Added 5=TRACE logging level, and made socket.io's debug use that level.
refactor Use promises/Q instead of attester.please.*

Conflicts:
	lib/launchers/phantom.js
Maintenance

This commit does a number of little fixes:

- fix a problem with undefined PhantomJS id
- do not reboot PhantomJS when received SIGTERM
- add `grunt-cli` file and update package.json so that we can
  pass parameters to node executable if needed
- remove `shortCut` since it's only used in one place and adds
  unnecessary complexity
- added some debug logging
- removed unused import

This commit also changes order of loading attester modules, so that
when they're unloaded in __reset__, it's done in an order that gives
more chance for the websocket connection with PhantomJS to be closed
before attester kills the Phantom child processes.

However there's still a timing issue to be worked around properly
(since things are asynchronous both on server and client), hence in
Node 0.10 it's still likely to see this error message when disposing
attester:

  [attester.TestServer.socketio] socket error Error: read ECONNRESET
      at errnoException (net.js:904:11)
      at TCP.onread (net.js:558:19)

Note that this timing issue likely doesn't occur when attester is started
with debug log level, due to this call in the code:

  attester.logger.logDebug("__reset__ " + module);

Then the server is a bit more busy and the client has more time
to disconnect properly.
fix PhantomJS not re-connecting in suite after attester reset

The load_plugin test was failing due to the fact that launchers were not
reconnecting after attester restart.

(test: grunt jasmine_node --grep=load_plugin)
Bump AT

This fixes https://github.com/ariatemplates/ariatemplates/issues/953
refactor Add .gitattributes
refactor Rename some files

...so that there are no multiple files with the same name doing different
things as this creates confusion.
refactor Move files
refactor Stricter JSHint

Copied JSHint options from AT, only enabling 'node' and mocha-specific
globals.

Removed some unused imports.
Make phantomLauncher and browserLauncher init and reset aware
Add timeout in launchers' dispose

...so that the spawned processes can cleanly exit before they're
killed by force.

This makes attester exit cleanly in Node 0.10 in most of the cases,
though still #61 remains to be solved.
1.5.0
Bump jasmine-node

to fix failing Travis build
Classic Test Runner: use `runIsolated` by default

The link "Debug this campaign" on attester status page
now leads to the page which runs each test in isolation,
which helps avoiding certain errors if the test modifies
global execution environment.
fix #90 Classic Test Runner: unable to reload test suite

When using AT <1.6.1, timestamped requests for `MainTestSuite` were sent
but the server ignored them. This commit allows timestamped requests
which fixes the issue with reloading test suites.

Close #98
fix #16 task restart mechanism when a browser is disconnected

Before this commit, when a browser was disconnected while executing a
task, the task was considered as failed.
This commit automatically queues again those interrupted tasks so that
they are executed again (with a maximum number of restarts, so that
tasks which make a browser crash do not lead to a never ending campaign).

Close #100
Integrating selenium-java-robot.

Close #102
Bump dependencies

`send` deprecated the usage of `.root()` so code change was needed

Close #99
Close #101
Custom test types

Change the way test types are loaded in order to allow creating custom plugins.
The logic now is the following

- try to resolve the test type inside the repository
- if missing require `attester-type`

Close #80