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.