Add BlankUsername and BlankPassword classes

This PR lands MSP-11245, MSP-11247 and MSP-11248
It makes Metasploit::Credential::Public STI and adds BlankUsername and BlankPassword classes to handle when either one is either a blank string, or we do not care what it is (.i.e SNMP, VNC, etc)

It also allows for the creation of Realm only Core objects.

# Verification Steps

- [x] `bundle install`
- [x] `rake db:migrate`

## `rake spec`
- [x] `rake spec`
- [x] VERIFY no failures

## `rake yard`
- [x] `rake yard`
- [ ] VERIFY no warnings for code added/modified by this PR
- [ ] VERIFY no undocumented code introduced by this PR

# Post-merge Steps

Perform these steps prior to pushing to master or the build will be broke on master.

## Version
- [ ] Edit `lib/metasploit/credential/version.rb`
- [ ] Remove `PRERELEASE` and its comment as `PRERELEASE` is not defined on master.

## Gem build
- [ ] gem build *.gemspec
- [ ] VERIFY the gem has no '.pre' version suffix.

## RSpec
- [ ] `rake spec`
- [ ] VERIFY version examples pass without failures

## Commit & Push
- [ ] `git commit -a`
- [ ] `git push origin master`

# Release

Complete these steps on DESTINATION

## `VERSION`

### Compatible changes

If your change are compatible with the previous branch's API, then increment [`PATCH`](lib/metasploit/credential/version.rb).

### Incompatible changes

If your changes are incompatible with the previous branch's API, then increment [`MINOR`](lib/metasploit/credential/version.rb) and reset [`PATCH`](lib/metasploit/credential/version.rb) to `0`.

- [ ] Following the rules for [semantic versioning 2.0](http://semver.org/spec/v2.0.0.html), update [`MINOR`](lib/metasploit/credential/version.rb) and [`PATCH`](lib/metasploit/credential/version.rb) and commit the changes.

## MRI Ruby
- [ ] `rvm use ruby-1.9.3@metasploit_data_models`
- [ ] `rm Gemfile.lock`
- [ ] `bundle install`
- [ ] `rake release`

This approach could suffer from the same problems as https://github.com/rapid7/metasploit-credential/pull/76/files#r18519813: someone that accidentally loads BlankUsername as a Public could set username to a non-blank value and nothing would stop that update from being saved.