New features

@kytrinyx I said adding the unit testing would make future development and changes easier... and since code works better than words, I made a few changes.

Included in these changes are testing some isolated cases (nils, empty strings, etc), making searching better by removing case sensitivity, and adding searching by first name.... long story short, for every change I was able to do the usual TDD process:  Write a failing test, make it pass, refactor, and move on.  That's much more difficult when all of the tests are threaded through the fixtures.