Wrap RuntimeExceptions from the XML parser

The google-http-client-xml parser throws RuntimeExceptions when the
InputStream has invalid XML or is empty, so wrap them in a LastPassException
so clients can catch it correctly.
Refactor: move login logic out of LastPassBuilderImpl
Implement caching

* Cache account data to avoid redownloading the same information
  on subsequent logins
* Use the cached data to perform local logins when the network is unavailable