Make contributor names unique

I created a custom uniqueness validation method and did not enforce the
constraint in the database because of the possibility of contributors
being "Deleted", i.e. status == "Deleted". The constraint is that among
active users (non-deleted), names must be unique.
Refactor contributor select html and javascript

The html and javascript for the contributor select portion of the forms
were exactly the same between the batch contributions and contributions
forms and inline forms. So, I extracted the html and the js.erb into a
couple of shared partials:

shared/_contributor_select.html.haml - the html for the control
shared/_contributors_javascript.html.erb - the js that assigns the
Giving.contributors variable to an array of json objects that the
typeahead uses.

The idea with separating the javascript into its own partial is that I
intend to implement caching on that so that it doesn't have to hit the
database every time unless a new contributor has been added or an
existing one has been modified. I haven't added the caching yet, but it
will be trivial.

I then moved the javascript code that does not need to be evaluated with
ruby first into app/assets/javascripts/contributors_select.js.coffee.
That is, the code to initialize the typeahead to select the contributor.
I put that code in a function that I tacked on to the Giving global so
that the js partials can call it to re-initialize the control as
necessary.

This is all an attempt to DRY things up in preparation for adding some
additional functionality to the contributor select control, specifically
the ability to create a contributor inline while adding a contribution
for them.
Add Sweet Alert
Add FactoryGirl::Syntax::Methods to RSpec config

So one can use create(:factory) instead of FactoryGirl.create(:factory),
etc.
Submit contributor name instead of id in contribution form

Switched the lookup of the id to the server side. This fixes the issue
where a user selects a contributor and then goes back and changes the
name in the name field, which wasn't resetting the hidden id field.

Now whatever is entered in the name field gets submitted and the id is
looked up from the name. (Names are now unique). So, currently an
invalid name will result in no contributor selected.

This is mainly in preparation for a new option which will allow a new
contributor to be created if the user so desires.
Add lodash
Allow creation of contributors from the contribution forms

If the contributor name entered does not match an existing contributor
name, an alert is displayed asking the user if they want to create the
new contributor and letting them know that they will need to go in later
and fill out all the rest of the details. If the user clicks ok it will
create the user via ajax and continue on to the date field. If the user
clicks cancel it clears the contributor name field and sets the focus
back on that field.

I ended up updating the typeahead that I was using to the bootstrap3
typeahead. There are a few small differences. Since I am no longer using
the contributor id field, Giving.contributors, which is the source of
the typeahead is just an array of contributor names rather than objects.
One thing to note is that by default for some reason the bootstrap3
typeahead has a built-in 250ms delay, which was really annoying. So I
changed it to 5ms.

I am also using an alternative to the standard js alert called Sweet
Alert. It is asynchronous so the result is handled in a callback, and
the code in the callback is actually executed before the modal is
completely closed, so I had to use setTimeout to get the code to set the
focus to the correct field to work correctly.