Show error message when trying to share programs with disallowed text

Don't let shared programs contain (1) swear words, (2) phone numbers, (3) street addresses or (4) email addresses.

Adds webpurify key to secrets file. May be changed before going to production.

Also includes a few cleanups:
- Rename LevelSource.lookup to LevelSource.find_identical_or_create, removing comments about name
- Add with_test_locale helper, use for notes test

![screen shot 2014-10-01 at 10 11 29 am](https://cloud.githubusercontent.com/assets/206973/4479603/d55d635a-498f-11e4-8879-a08408de9f6e.png)
![screen shot 2014-10-01 at 10 11 16 am](https://cloud.githubusercontent.com/assets/206973/4479606/d57eb082-498f-11e4-8dd9-64af735c3920.png)
![screen shot 2014-10-01 at 10 10 55 am](https://cloud.githubusercontent.com/assets/206973/4479604/d55e9054-498f-11e4-80aa-b5af523b354e.png)
![screen shot 2014-10-01 at 10 10 27 am](https://cloud.githubusercontent.com/assets/206973/4479605/d5666248-498f-11e4-80e8-9f8d1fc575cc.png)

this is not a valid way to verify an email address - please see lib/cdo/poste.rb:

```
  def self.email_address?(address)
    begin
      email = Mail::Address.new(address)
      return false unless email.address == address
      return false unless email.domain # Must have a domain
      # A valid domain must have dot_atom_text elements size > 1; user@localhost is excluded
      # treetop must respond to domain; we exclude valid email values like <user@localhost.com>
      return false unless (email.__send__(:tree).domain.dot_atom_text.elements.size > 1)
      true
    rescue
      false
    end
  end
```