Fixed compile errors and added a bunch of unit tests for SalesforceSecurity library.

It may make more sense to test this with a work flow that's closer to the actual app flow that's going to occur.  The `observeValueForKeyPath:ofObject:change:context:` method of `SFKeyStoreManager` will only ever be invoked and processed for changes to `[SFPasscodeManager sharedManager].encryptionKey`.  Updates to this property in turn are effectively only triggered by `[SFPasscodeManager changePasscode]`.  Seems like we should leverage that method for triggering the key store updates that we're verifying.