Simplify task model

Only include projectId, title, and description as main
fields for tasks.  The rest can likely be done with tags.
Migrate popovers to requirejs module

Instead of popovers just being functions in a js
file, make them a formal AMD module.  The reason
for this is that popovers require bootstrap to
be loaded before they can execute.  Hopefully this
will solve some of the weirdities I've been seeing.
Add SSL nginx config

Make it easier to put up sites with nginx using SSL
by including a default nginx template that can be
modified.  Or put your keys in `/etc/nginx/ssl/` and
everything will just work.
Eliminating the notion of volunteers

For now, just let people participate by starting a new
topic in the comments.  So there is no notion of
apply or having a specific volunteer.  May add it
back in later as requirements dictate, but not
necessary for now.
Create utils; update comments to support tasks

Created a new directory called `utils` in services in
preparation for tasks.  Include project.js and task.js
that provide the `authorized` function for checking whether
a given userId is authorized to view a particular project
or task.

Updated CommentController by refactoring the comment query
and processing code into a helper function which can be called
by both findAllByProjectId and findAllByTaskId.
Add a policy for task authorization

Tasks need a way to check if a given userId is authorized
to access that task.  Prevents unauthorized access to
endpoints.
Policy updates to control access

Be more comprehensive about what can and cannot be done.

There's a lot more to be done to prevent malicious access,
but this covers a lot more cases.

Need to be able to:
- check that you own an event before updating or deleting
- check that you own a comment before updating or deleting
- ... I'm sure there's a lot more.
Implement tag functions for tasks

Add `findAllByTaskId` in the TagController. Factor out
the tag lookup code so that it can be used by either
project or task tag lookups.  Update destroy to check
permissions for either project or task depending on which
is specified.
More policy work for tasks

Add `taskId` to check if taskId is specified in the body,
then make sure that you have ownership.

Additional changes to create/update/destroy
More policies to prevent malicious data access
Fix typo; fix policies for likes

Unbreak the build (whoops) by fixing a typo
in TagController and updating the create policy for
likes.
Pass params to souces when querying

By passing the HTTP parameters to the data source when
querying it, the source can use those extra optional
parameters.  This allows more dynamic querying, like:

http://localhost/ac/tag?q=foo&type=bar

Update the model source to require explicitly defined
parameters, and then check if any of those parameters
are present in the query.

NOTE: This commit requires that you reset your
sources.ex.js.  Just do
cp config/settings/sources.ex.js config/settings/sources.js
Refactor tags to app (tags/show)

So that tags can be reused in multiple views, refactor the
tags functionality into a separate app called tags/show
and create a backbone view called TagShowView.

This is the first step to reusing the tag functionality
in tasks (and user profiles).  The tag app does not yet have
the hooks to configure it for a particular view (eg project
or task), but it can now be instantiated from any view.
Allow tags to be configured by instance

This update adds a new structure to the frontend tag config
file.  The tags are now in as associative array.  Each section
of the app can specify which tags are applicable and the order
they should be displayed (see the project example in tag.js)

The frontend then only displays those tags on the page,
only queries them for the autocomplete, and only allows you
to add tags of that type in the 'create tag' modal.

The backend modal source has been updated to allow `IN` style
sql queries, such that the frontend can pass a list of values
and those values will be unmarshalled back into a list.
This is particularly useful for tags, where the frontend
can query by types specified in the tag config
(eg ['skill', 'agency'])

Here is how you create a specific tag view:

      this.tagView = new TagShowView({
        model: this.model,
        el: '.tag-wrapper',
        target: 'project',
        url: '/tag/findAllByProjectId/'
      });
      this.tagView.render();

`model` is the model of the parent object, such as a project or
task.  The only value used from model is `id` at this stage,
in order to query tags relavent to that object.

`el` is the element that should be rendered on the page

`target` is the section of the application that this view
is used.  This is also used for triggering events, such as
`project:tag:save` if target is set to project.

`url` is the base url to query for tags.  Note that this
will be different for differnt parts of the app, such as
tasks would use `/tag/findAllByTagId/`.  The `model.id`
is appended to this url to query the tags for this object.

With this commit, tags should be portable and ready for use
in tasks or profiles.
Merge sprint6 main branch with sprint6-tasks

Resolve the conflicts in a number of the controllers
due to the change in how popovers work.

This merge has not yet been tested.

Conflicts:

assets/js/backbone/apps/
comments/list/controllers/comment_list_controller.js

assets/js/backbone/apps/
events/list/controllers/event_list_controller.js

assets/js/backbone/apps/
project/show/controllers/project_show_controller.js
Fix comment regression for empty comments

When no comments exist, it should be calling done.  But
the code was copy and pasted when adapted for tasks, and
was still calling res.send incorrectly.  Fix that
regression.
Fix typo in cleanString...

Need to tell it where to put the cleaned string.
Re-add timeago (see Issue #17)

This partially fixes part 5, but is dependant on
the fix to part 7 to be completely fixed and closed.
(new topics/comments don't have timeago applied because
comment_form_view is directly rendering the comment)
Need to use popovers.*
Quick fix for part 8, issue #17

Wanted to demo this functionality so put in a quick
fix for showing links.  This will only work
for comments and not for topics.

The whole thing will have to be overhauled anyway when Dain
implements the spec for the inline autocomplete.