Allow apps to be non-instance-switchable.

We need certain apps to remain dedicated solely to a certain instance. In these
cases, the app must not be allowed to switch to other instances. We had
overlooked a scenario in which the user could access the instance switcher from
the profile screen of apps that were meant to be single instance. To address
this we use a boolean set on the OTM shared environment settings. The value of
this boolean is determined based on the value of the "instance" string. Empty or
missing strings make the instance switchabe. The controllers will reference this
logic and add or hide the buttons from the screen as appropriate.
Merge pull request #162 from lliss/topic/non-switchable-instances

Topic/non switchable instances
Add row and section for all instance cell.

This controller needs to show a button (cell) to get the user to the list of all
instances. We adjust our current sections and rows to accommodate this.
Fetch public instances and store resulting data.

We need to hit the new endpoint to retrieve the list of all public instances. We
store this since it won't change often much like the species list.
Add new table view controller for all instances.

This new controller calls the shared settings which updates the list of
instances and then generates an alphabetically sorted list of table cells. The
cells are added to the controller in a single section. The all maps view  has a
delegate that will be set to the instance switcher controller so that controller
can update perform the instance switch which avoids the instance switch logic in
multiple places in the code.
Make instance switcher a delegate.

The instance switcher needs to be the delegate for the all instance table view
controller and it needs to trigger switching to an instance update based on the
returned data.
Prevent application from entering infinite loop.

If the server does not respond or serves bad data on attempting to set the
instance we hit an infinite loop of wherein we:
(try to fetch an instance) --> (fail) --> (repeat)
Instead we just throw an error that can be dismissed and a simple log message.
Check for duplicate email message.

When creating a new user, the api server responds with a 409 when there is a
confilct for an email address or username. This was causing confution because
the app did not check which error was encountered and alerted the user that the
username was duplicated when sometimes it was the email address. In order to fix
this we check for the string returned by the api server in the message body and
use this to set a different error message. This is not wonderful since it relies
on the exact string from the API but I am adding a warning in the api server
code to let other devs know that changing that string might have bad
implications.
Merge pull request #170 from lliss/topic/duplicate-email-error-message

Check for duplicate email message.
Restyle registration page.

Our registration page had some styling issues. Here we add in the profile image
from the web site as a placeholder. This is done by layering the user added
image on top of a static image that is controlled in the login storyboard.
Background color is also added to the view controller and autocorrect is
disabled for username, first name, and last name fields.
Merge pull request #169 from lliss/topic/instance-switcher-all-maps

Topic/instance switcher all maps
Minior display fixes.

Make iOS app look similar to the android one.
Adjust element sizes and positions.

The filter button on the filter page was being pushed up off the page in certain
instances after added a speices. I moved the button off of the subview and onto
the parent view and rearranged the sizes accordingly. I also made the search
filter a weak element since it shouldn't persist after the view controller is
removed.
Switch instance list to occur on viewDidLoad.

In testing I ran into an issue with the server and it caused the all instances
list to fail. Because we were dealing with animated views and were loading data
and causing failures before the view was actually finished, the application
would crash. Moving the fetching of the instances, and associated error handling
later (after the view is done loading) prevents this issue. I also removed
commented out code from the recently created controller.
Merge pull request #172 from lliss/topic/species-filter-offscreen

Topic/species filter offscreen
Merge branch 'topic/registration-page-styles'

Conflicts:
	OpenTreeMap/OpenTreeMap.xcodeproj/project.pbxproj
Email addresses and names should not autocorrect.
Dismiss the login overlay for logged in users.

We were seeing issues in which users who logged in from a screen that was not
the profile screen would see the login screen even though they were logged in.
This was caused by the controller checking to see if it had ever presented the
user with the login page. We dismiss that screen for users who have logged in
status.
Make sure to reset profile data in edge case.

Found an edge case in which a user goes to profile while logged out, dismisses
the modal, then goes to main map, then logs in through the add tree screen then
returns to the profile page. This caused profile data not to be set. Here we
trap that edge condition and reset the data.
Merge pull request #175 from lliss/topic/login-screen-persists

Topic/login screen persists