WIP: Add ability to get/set a crush map from the cluster

@jcsp @dmick 
There are still two failing tests:
<pre>
======================================================================
FAIL: test_list_delete (tests.test_keys.TestKey)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/calamari/rest-api/tests/test_keys.py", line 35, in test_list_delete
    self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
AssertionError: 200 != 204
-------------------- >> begin captured logging << --------------------
django.request.profile: DEBUG: [3.98302078247ms] /api/v2/key
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: test_list_patch (tests.test_keys.TestKey)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/calamari/rest-api/tests/test_keys.py", line 22, in test_list_patch
    self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
AssertionError: 200 != 204
-------------------- >> begin captured logging << --------------------
django.request: DEBUG: KEYS [{u'status': u'accepted', u'id': u'minion1'}, {u'status': u'accepted', u'id': u'minion2'}]
django.request.profile: DEBUG: [3.39293479919ms] /api/v2/key
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
</pre>

that are a result of  8d22cf74844c8733ef58db0d2d9c21bfa8b91c3f
it is somewhat unexpected. If I can't figure it out today I will fall-back to the StaticHTMLRenderer
So is this intended to raise AssertionError on malformed input?  Better to raise something descriptive, ideally which will bubble up in a readable form to the REST API.  If crushtool gives you something sensible on stderr (you'd have to check) then bubble that up.