Inline object creation.

Allows the creation of related objects during a workflow.
For example, this patch implements importing keypairs during
the launch instance workflow and allocating floating IP
addresses during the floating IP associate workflow.

This required several significant changes:

  * SelfHandlingForm should no long return a redirect.
    Instead, it should return either the object it
    created/acted on, or else a boolean such as True.

  * The ModalFormView now differentiates between GET
    and POST.

  * Due to the previous two items, SelfHandlingForm
    was mostly gutted (no more maybe_handle, etc.).

  * Modals now operate via a "stack" where only the
    top modal is visible at any given time and closing
    one causes the next one to become visible.

In the process of these large changes there was a large
amount of general code cleanup, especially in the javascript
code and the existing SelfHandlingForm subclasses/ModalFormView
subclasses. Many small bugs were fixed along with the cleanup.

Implements blueprint inline-object-creation.

Fixes bug 994677.
Fixes bug 1025977.
Fixes bug 1027342.
Fixes bug 1025919.

Change-Id: I1808b34cbf6f813eaedf767a6364e815c0c5e969
Added custom parser for tablesorter.js

A custom parser is needed for sorting of
custom type columns like the 'Size' columns.
The 'KB', 'MB', 'GB'... values break the sorter
logic and need to be parsed manually.

The custom parser works on all 'Size'/'RAM'/'Memory'
columns. It works also on flavor-info columns like:

    `m1.tiny | 512MB RAM | 1 VCPU | 0 Disk`

The custom parser sorts these lines based on the RAM value.

Note: as seen in horizon.tables.js file, an workaround was
added as there is one more <th> in the <thead> (incl. the table_caption)
than the <td>'s in <tbody>. Thus the custom parser needs
to be added to [i-1] header, while the header itself needs [i],
as the parser is processed in <tbody>, while headers are processed
including the table_caption... This might be a problem at some time,
although currently it works...

Fixes bug 1013475

Change-Id: I793ae330c33fde4e625f96e55fdda3748c84b8c3
Merge "Added custom parser for tablesorter.js"
Added action for creating a volume from snapshot

Added a new action to create new volume from
a volume snapshot. The snapshot_id is passed to
nova volume API. The 'Create Volume' form is
reused, with the 'size' value being checked against
the snapshot size, as it cannot be less than
the snapshot size.

Fixes bug 1023740

PATCH SET 4: Added dropdown to select snapshot source
in 'Create Volume' form, when loaded from /nova/volumes/
When a snapshot is selected from the dropdown, the name
and size are pre-filled in the form (I've removed
the description copy as it is probably specific
for the reason a snapshot is being created).

PATCH SET 6: rebased with master, fixed a bug with
get_context in nova/volume/views

Change-Id: I20dd8d698f5d8481938417557e09dcdc9b891e82
Fixed the bug with images returned as generator

After a fix in Glance to support pagination,
the list of images is returned as generator,
while api.glance expects a list.

PATCHSET 2: removed optional kwargs if None
PATCHSET 3: fixed snapshot_list_detailed.

Fixed bug 1027210

Change-Id: I1c68e3625c22e591776e83c742e7b94dc893f196
Merge "Added action for creating a volume from snapshot"