Bundle and install 'omniauth-facebook' gem

Rename omniauth providers config and loading to be more general. More
providers will be introduced later.
Check if provider is enabled before adding link

Determine if each provider is enabled in 'config/environment_custom.rb'
before attempting to add a link in the shared links view. Without the
check, the links would always be available but would be dead ends on
the provider side if the admin hadn't provided a key and secret in the
omniauth provider config.
Clean up auth providers custom environment config
Add omniauth-facebook config

If facebook is enabled in the custom environment config, load keys and
secrets from the generalized omniauth_providers YAML. The YAML file
contains all the keys and secrets to access the provider API's if
configured by admins.
Add facebook strategy and callback

  * Add a callback method to the omniauth callbacks controller.
  * Add the strategy to the User devise configuration in the User
    model.
Fill out facebook user factory

Fill in necessary attributes for a user authenticating through
Facebook.
Expand User model Oauth specs

Test Facebook authorized user records.

Currently, the user table has a failure in indexing over the user email
column. Normally, all users would have an email address but
authenticating through Twitter or Facebook doesn't provide one (unless
specifically requested for in the case of Facebook). Without an email
address, the email index fails. The index can be removed, but it would
significantly slow down the access of records that do authenticate
normally through devise.
Add User table index migrartion

Prepare a migration to change the indeces on the users table:
  - Remove the unique requirement for the users' email index
  - Add an index over the provider and uid columns
Fix User index migration

Syntax doesn't require 'column:' to be specified, just provide an array
of the columns if there is to be more than one in the index.
Run User index migration
Add email validation back to User model

Validate the uniqueness of emails if one is provided during record
creation. Users authenticating with an oauth provider won't have an
email address so the field is allowed to be black. Those that do have
one need to have a unique address.

The index over user emails in the database allows for blank emails
across any number of user records. However, it loses the ability to
check for duplicate addresses where they do exist. Records then must
be checked in the model (but this is the only place they're validated).
Add sanity check test to User model spec

Check that users can have the same provider with different uid's and
vice-versa.
Enable OmniAuth test mode in specs

To test omniauthentication, flag test mode as true. This will make
OmniAuth stub the results of an authentication request instead of
making an actual request to the auth provider.
Create support module to stub auth results

Incdude a support module into the Rspec config with methods for
stubbing valid and invalid credentials from auth providers.
Create feature specs for OmniAuth testing