Add Jasmine test framework
Add jquery/jquery-ui spec helper
Refactor Gruntfile for better compatibility

Broserify was getting confised mostly because I was confused. This
refactors the Gruntfile so it is happy with browserify.

- Independent bundles for libs, applicaiton, and specs
- watch now only builds what is needed
Removes testem support

For this kind of project it's a little silly / overkill
Rename app.js to bootstrap.js

Fixes grunt watch task which was adding all files in the root for some
reason.
Add jasmine-as-promised

https://github.com/Mindspace/jasmine-as-promised

Extension of Jasmine unit tests to support Promises for async unit tests
Set proper config for grunt watch

The watch was forgetting about changes to src/* when working with tests.
Add Q.longStackSupport to jquery.helper

Better stack traces with Q promises.
Remane jquery.helper to spec.helper

Much better name!
Add some helper functions for testing promises

The usual method of testing with jasmine-as-promised:

    runs(function() {
      return Q("foo").then(function() {
        expect( something ).toBe(something);
      });
    });

But this misses a failure if the promise is rejected, so you add more
code:

    runs(function() {
      return Q("foo").then(function() {
        expect( something ).toBe(something);
      }, function() {
        expect( false ).toBeTruthy();
      });

This works but looks bad and is not very readable. Instead a few helper
methods allow for better readability. Fulfilled

    runs(function() {
      return Q("foo").then(function() {
        expect( something ).toBe(something);
      }, jasmine.expectedFulfilled);
    });

    runs(function() {
      return Q("foo").then(jasmine.expectedRejected,
        function() {
          expect( something ).toBe(something);
        });
    });
Add spec for promiseWhile

Fixed a bad bug in it's execution. It was designed to reject the promise
when the "worker" function (called `body()`) threw an exception. But
because it was called outside of Q it would not actually resolve.

    Q.when(body(), loop, done.reject);

Can't pass a function to Q.when because it thinks it's a value.

    Q.when(body, loop, done.reject);

Instead what we want is for Q to call the function and then resolve /
reject:

    Q.fcall(body).then(loop, done.reject);