Incomplete start on automating package configuration according to brand.

- Brand-specific configuration will be in 'custom/brands' subdirectories
- Brand package config will be in 'custom/brands/*/package_config.json'
- The currently selected brand will be implemented by a symlink,
  from custom/brand to the chosen custom/brands/* subdirectory.
- A grunt command, 'grunt brand:...' will be used to select the current
  brand and reestablish the cordova plaforms.
  - Sans argument, it will indicate currently selected and ones available.
  - With special argument, like '-', it will establish the default brand
    ('brands/SpiderOak') if no brand is selected.
    - This way, 'npm install' can finish with 'grunt brand:-' to make
      sure the default brand is selected, or do nothing if it's already
      configured.

The preliminary Gruntfile.js setup to implement the command is
done (including upgrade of grunt-shell to get past a bug that prevented
grunt shell commands taking arbitrary arguments). The script is barely
started, but most of the necessary stuff is already present among our
custom cordova build hooks.

I merged master before this commit, so it should be up-to-date.
Name package branding script to something more informative.
Merge branch 'master' into issue-468-package-configuration
Invocation and brand selection work. Next: manifest massage and cordova stuff.
Consistently use "establish brand"

... to mean "situate and process the brand setting".
Git-ignore the 'brand' link.

It may be necessary for people migrating from the prior repo arrangement
to dispose of/move aside the brand directory, must watch for that.
Move "Enterprise" brand to "Blue".

("Enterprise" seems a lot more informative for customers, but maybe I'm
mistaken thinking that it's correctly described by "Enterprise"?)
Provide more comprehensively for ways symlink can be blocked.

Include new npm module, errno-codes.
Merge branch 'master' into issue-468-package-configuration
Sort out various brand-specific config files, in custom/brands/<brand name>

project_config.js:
  Brand-specific project packaging configuration, that require cordova
  platform reinit, cannot just be interjected at build time.

custom_config.js
  Brand-specific parameters that are interjected at build time.
Rectify the project_config.json format, and add projectName value.

Node's 'require' needs the values to be wrapped in object notation.
Use projectName from custom/brands/*/project_config.js.

And use absolute paths, determined according to script location, instead
of joins on brittle '.'-prefixed relative paths.
Add project "description" field to project_config.json files.
Do fabrication of config.json

and remove the default one from the repository.

Lots of sundry tweaks along the way.
Fabricate project manifests incorporating brand specifics.

- Create new 'custom/brand_elements.json' to provide the structure
  transformation data.

  It's analogous to 'custom/elements.json', in that defines the process
  rather than the data being processed. It should changes only rarely,
  eg to specify transformations for new platform manifests.

- Move the project config and manifests to ".template"-suffixed versions,
  and .gitignore the fabricated, non-suffixed versions.

  In order to make transformation of the SpiderOak-Info.plist file easy
  using node elementtree, add a distinguishing attribute to the target
  string tag.

  So:
      <string>com.spideroak.android</string>
  is now:
      <string this="CFBundleIdentifier">com.spideroak.android</string>
  I don't expect that this would disrupt the build, and haven't noticed
  any problems, but I'm not sure. If necessary, it would not be hard to
  add something to omit the attribute in the produced version.
Use node-plist for plists; settle platform-vs-brand identifier distinctions.

We don't have to use special qualifiers on the target plist element,
then.

Identifiers issue: different platforms of the same brand could use the
same identifier. We have inherited distinct and peculiar identifiers for
android ("com.spideroak.android") and iOS ("com.spideroak.SpiderOak"),
which means we will have to maintain distinctions for these
platforms.

 However, we can avoid having to change existing project_configs when
 new platforms come around by settling on a simple form for a default
 identifier, and sticking with that. What we've resolved:
- android and ios will have their distinctive identiers
- the default identifier will be "com.spideroak.mobile"
Conclude the process by removing and recreating the cordova platforms.

We default to creating ios and android if no platforms are already present.
Make the default platforms script variables,

for easy finding if/when we add to the default contingent.
Update README.md to reflect new "Getting started" flow.

Also, tweak some messages.
custom/brand_example is now custom/brands/Blue.

(I've been keeping it around 'til ready for PR, to make intervening
migration of changes to Blue config easier.)