Container token creation tested.
Merge pull request #328 from jaycee/test-love-1-containers

There have been minor changes to machine-panel-view to make it easier to tests;
specifically, the duped code rendering container tokens in the regular and the
bare metal case has been broken out into its own method, which can be stubbed.

The test file, test_machine_view_panel.js, has been modified a lot.
* Tests have been reordered to put similar tests together, so it's easier to
  determine what has and has not been tested, and test like things via one
  describe block. e.g. all the drag/drop tests (including those about listening
  to events) are now part of a 'token drag and drop' describe block. I've noted
  inline where tests have just been moved without being altered.
* Many tests have been added for the machine panel view's rendering of
  containers.
Add tests for the machine view header labels.
Merge pull request #327 from huwshimi/header-count-tests

Added missing tests for header labels being updated with the correct machine/container/unit counts.
Unit tests for _smartUpdateList, used in updating machine column.
Unit tests for _renderMachineToken.
Merge pull request #330 from jaycee/test-love-2-machines

app/widgets/machine-panel-view.js 
* ```_smartUpdateList``` has been refactored, moving its two responsibilities--
  adding and removing tokens as necessary--into two methods. These methods are
  easier to test, and a bit clearer to read.

tests/test_machine_view_panel_view.js
* Unit tests for all inputs and all expected behavior of the components of
  _smartUpdateList have been added.
* Unit tests for _updateMachine and _renderMachineToken have been added

Note to reviewers: machine tokens are also tested in their own file, which has
not been updated. Additionally, invisible in the diff, but available in the
full file, machine column has quite extensive functional testing; I've only
added units to more directly tests private methods that were only implicitly
tested.
Cleanup unplaced service unit code.
Merge pull request #332 from jaycee/service-unit-code-cleanup

This is a trivial branch landing some minor refactors to the unplaced service
unit code.

* Service unit token rendering is broken out into its own method, both for
  consistency with other tokens and to work more cleanly with _smartUpdateList
* The unused machine and containers attr from the service units has been
  removed; containers was never populated and neither were used, nor appear to
  need to be used.

If I'm wrong on the last assertion I'll happily revert that change.

Service unit rendering is well tested; as this just moves functionality out of
an anonymous function and removes unused and untested bits, no new tests are
needed.
Beginning functional test for containers column.
Add support to placeUnit for placing a unit on an already existing machine
Added tests for placeUnit functionality in the ecs
Switch to an internal list of machine tokens.

By using an internal list, we can re-render specific tokens by pulling
them from the list and simply calling render(). First step towards very
efficient and intelligent rendering of only deltas.
Fixed bug 1321345
Merge pull request #333 from jaycee/test-love-3-functional-containers

This adds two functional tests:
* A test that containers are rendered when a machine is selected.
* A test that containers can be selected via click.

It's follow up to a previous PR, which ensures the containers column is
thoroughly tested.
Merge pull request #335 from hatched/inspector-1321345

When charm urls contained a hyphenated name and a charm version number the package name was not parsed correctly when creating a new model.

#### To QA
- Use the il and mv flags (This bug only presented itself using these flags).
- Search for the `juju-gui`.
- Drag and drop it onto the canvas.
- Click the service icon to open the inspector.
- Close the inspector
- The service token should still read `juju-gui`
Merge pull request #325 from kadams54/machine-token-rendering

First pass. Everything works, tests pass, but the code probably isn't as pretty as it could be. Additionally we still re-render the entire machine token; I haven't started on making that smarter to only re-render (for example) the list of icons. I suspect we'll also want to switch the unplaced units to a similar approach once this work is finished. At that point we'll be able to eliminate `smartUpdateList()` - yay!

### QA

With `/:flags:/il/mv`.

1. Deploy the Wikimedia bundle.
2. Drag-n-drop the Wordpress charm over, but don't deploy it.
3. Switch to machine view.
4. Run this in your console:
~~~~
var u = app.db.units.item(2), m = app.db.units.revive(u); m.set('machine', '0');
~~~~

You should see the Wordpress icon added to the 0 machine.
Updated deployer changes panel to match designs.
Merge pull request #331 from huwshimi/deployer-bar-visuals

Updated the deployer changes panel to match the visuals (https://drive.google.com/a/canonical.com/?usp=folder#folders/0B7XG_QBXNwY1WGlyVzN2LWtrcmM)

QA:
Drag a service to the canvas.
Click the "2 changes" link in the deployer bar.
Check that the panel matches the visuals.
Merge pull request #334 from hatched/unplaced-to-existing

1. Fixes a bug with `ecs.placeUnit` which would cause dropping an unplaced unit on an existing container to fail.
2. Adds tests for `ecs.placeUnit`.

#### To QA
- Open `config-debug.js` and disable `simulateEvents`.
- Open `app.js` and add `this.fakebackend = state` after line 418
- Load the GUI using the mv and il flags.
- Drag and drop a charm to the canvas. 
- Switch to the machine view.
- Drag and drop the unplaced unit to the `New Machine` header.
- Click `deploy` and `confirm`.
- Switch back to the service view.
- Run `app.db.machines.add({id: '0/lxc/0'}); app.fakebackend.db.machines.add({id: '0/lxc/0'})` in the console.
- Drag and drop a new charm to the canvas.
- Switch to the machine view.
- Select the `0` machine. You should now see an empty container and 'Bare Metal' with your previous service.
- Drag the unplaced unit and drop it on the empty container.
- Click `deploy` and `confirm`.
- Switch to service view and back to machine view. You should now have placed your new service on that container.