Implement basics for ServiceUnit token/view.
Minor code fixes, per Rick.
Fix clearing url hash on details close.

- Update the entity-base to pass a null hash in the metadata during the change
event.
- Add tests to both the bundle and charm details that the hash is cleared.

QA
---

Make sure to use the :flags:/il for all QA steps.

 - open a charm details view, go to the readme tab. Verify the url has
   #readme. Close the details and the url should not have any hash any longer.
 - Repeat the process, make sure that you can copy and paste that url with the
   hash into a new browser tab. Then close the details, and the hash goes away.
 - Do the same for bundles.
Fix env header buttons to function.

- Requires the il flag
- Fires correct event updates to show/hide the machine view UI
- Adds a test for the correct events.
- Update to make sure the header is drawn in the new state world.
- Update the CSS to move the machine view panel next to the sidebar.

QA
----

Load the GUI with :flags:/il/mv and click back/forth on the buttons in the
control for Service/Machine views.
Merge pull request #239 from kadams54/deployed-unit-tokens

Right now primarily a code review as this isn't wired into anything yet.
Merge pull request #249 from mitechie/machine-view-control

- Requires the il flag
- Fires correct event updates to show/hide the machine view UI
- Adds a test for the correct events.
- Update to make sure the header is drawn in the new state world.
- Update the CSS to move the machine view panel next to the sidebar.

QA
----

Load the GUI with :flags:/il/mv and click back/forth on the buttons in the
control for Service/Machine views.
Merge pull request #248 from mitechie/closing-details-hash

- Update the entity-base to pass a null hash in the metadata during the change
event.
- Add tests to both the bundle and charm details that the hash is cleared.

QA
---

Make sure to use the :flags:/il for all QA steps.

 - open a charm details view, go to the readme tab. Verify the url has
   #readme. Close the details and the url should not have any hash any longer.
 - Repeat the process, make sure that you can copy and paste that url with the
   hash into a new browser tab. Then close the details, and the hash goes away.
 - Do the same for bundles.
Service inspector closes without flags.
Merge pull request #250 from jaycee/fix-broken-inspector-close

This resolves a simple bug wherein the service inspector (absent flags) would not close after deploying a service; this was simply because the original call to .destroy was no longer made, even without the state flag.

I've not bothered adding tests, as this code will only live for a short while (e.g. the end of this week). In the meantime, we would like comingsoon to still work.

QA
This branch must be QAed against the state flag and without flags. In both cases, after deploying a service, you should be able to close that service's inspector using the close button.
Support tags and root-disk constraints.
Merge pull request #246 from frankban/tags-constraint

Add support for setting/retrieving the missing
constraints: "tags" and "root-disk".

Fix a bug preventing constraints to be removed
in sandbox mode.
Also improve the constraints validation
performed before sending the API requests.

Note that currently bug 1309449 [1] prevents
tags to be removed when using a real juju-core
environment.

QA:
QA must be done in sandbox mode and real env [2].
It involves deploying charms, setting constraints
(including the new ones), changing and removing
them, to see if the backend reacts correctly.
When setting tags, ensure they are normalized (
e.g.: "foo bar, spam," is turned into "foo-bar,spam").
Also, please make sure that constraints are
preserved when exporting/importing bundles, whether
they are set or missing/removed.


[1] https://bugs.launchpad.net/juju-core/+bug/1309449
[2] E.g. by using juju-quickstart to deploy the GUI,
    then running `juju set juju-gui juju-gui-source="https://github.com/frankban/juju-gui.git tags-constraint"` and then waiting for the GUI
    to be ready.
Update charm release instructions.
Merge pull request #251 from frankban/new-charm-release-docs
Populate search text into search field.

The search field was pulling from the state.filter object. That object
needs to be updated in state.loadRequest. We may move away from the
filter object to the section metadata; if so, the search input will
need to be changed to draw from that instead of filter.get('text').