Reduce animation glitches when the vault opens by caching the item index

The item index data was fetched and decrypted 3 times when opening
a vault and starting a sync which could trigger animation lag.

This avoids the problem by caching the decrypted item index.

An alternative approach would be to defer the sync start until after
the animation completes, or vice-versa.
Separate view and edit modes in details UI

Separate the details view into a view mode focused
around presentation of fields and using the data
and an edit mode for changing item fields.
TSD definitions update

Main impacting change is that Q.reject() now takes
a type argument and return a Promise<T> rather than
a Promise<any>
Roll typed-react and React typings update

Main impacting changes:

 * React.Descriptor -> React.Element | React.ComponentElement
 * typed_react's utility functions for creating component classes
   changed and are simpler to use.
Fix focus handling in item list and details view

Re-work focus handling as follows:

 * Add a 'focus' prop to the ItemListView and DetailsView
   components which is set by the parent app view component
   depending on the state of the app.

 * When the focus prop is set to true for a component,
   set the focus either on the root element for the component
   or one of its children.

   Setting the focus is done using a mixin.
Fix error focusing master password field in Chrome extension

An error occurred if the UnlockView component was mounted whilst
unlocked. This can happen in the Chrome extension where the UI
is mounted when the popup view is shown but the state of the app,
including whether it is unlocked or not, is persisted when the popup
view is dismissed.