CDAP-772 Feature/cdap 772 namespace service

Namespaces APIs to manage namespaces metadata.
Question: 
Should we create and use ``Id.Namespace`` instead of using namespace name as ``Key``?

- [x] Namespace service to create, list, delete namespaces
- [x] Unit testing, standalone testing
- [x] Testing on a distributed cluster. 
Could very well be. Just taking a step back and re-analyzing my code here:
I think one very basic problem with my code in ``NamespaceHttpHandler`` is the global try/catch. If I restrict try/catch blocks to LOCs where the exceptions occur, I think we may be able to fix this problem better. 

To your point:
> So in case of a race condition, what would this do? Throw a TransactionFailureException?
Two clarifications:
1. You mean the check that I would add in this method *should* throw a ``TransactionFailureException`` right? As I understand it, if there were a race condition, and we don't have a check here, then there wouldn't be an ``Exception``, the namespace entry in the ``MDS`` will be overwritten.
2. The Transaction Manager could throw a ``TransactionFailureException`` for failure scenarios other than this race condition too, right? So we would need a way to distinguish between this race condition and other failure scenarios? Would it be better to throw a different, custom exception from this check in that case?

I think I may have a solution, but should we go over it in person first before discussing it in PR?