Make item fields editable

Use text input component from react-material to implement
editable item fields

Also fix a mistake where sync errors passed
Error.message instead of Error to the showError() function.
Fix sync-on-unlock not happening after a sync failure

The Sync.currentSync promise was not reset in the event
of a sync failure so subsequent calls to Sync.syncItems()
behaved as if a sync was already in progress.
Fix warning about event listener leaks on large screens

There is one icon update listener per visible item
in the item list. On large screens this exceeded
the default of 10 listeners per event stream.
Fix promises rejected by dropbox.Vfs not implementing the Error interface

Wrap the DropboxJS lib errors with err_util.ApiError
which does implement the Error interface as expected
by higher layers
Fix changes to non-title fields not being synced from vault to store

Fix broken item revision generation logic whose output depended
only on the item's title and UUID. Consequently when an item
was changed locally but the title did not changed, the item
revision did not change and since (current.revision == lastSynced.revision),
the sync process treated it as a remote rather than local item change
and overwrote the local item with the vault version.

Fix this by using all ID metadata fields and contents in item revision ID generation.
Record info about items which failed to sync in progress events

This is partly for debugging but will also allow better
error display in the UI if changes fail to sync.
Fix 'Reveal' button for text input fields

 * Update to a version of react-material which handles
   props.value and props.defaultValue in the same way as
   react.DOM.input

 * Avoid replacing the actual form value with '*' chars,
   otherwise if the user types in the form when not revealed,
   their password will be corrupted.
Make details view content scrollable

Make it possible to scroll the details view if the fields use
more than one vertical screen's worth of space.
Only show field controls for the focused field

When an item field loses focus, hide the Reveal and Copy
buttons.
Load react-style CSS styles in the Chrome extension

react-style injects the compiled CSS into a <style>
element in the document.

In the Chrome extension the app is rendered into a different
document (belonging to the popup view)
than the one which the app code runs in (belonging to the background
page), so we need to copy the <style> element from the background
page document to the popup view's document.
Update item location and account when item fields are edited

Update an item's overview fields when the user edits
an item field's contents.