Cleaned up repetitive error handling in selendroid-server

Sorry for the diff size on this one - no functional changes just code cleanup.

Introduced a StatusCode enum to make the SelendroidResponse constructors clearer, also made the integer constructors private to prevent their usage in future.

Also centralised all of the exception handling (StaleElements/ElementNotFound/UnknownError) into a single method handle() in SafeRequestHandler. All child classes of SafeRequestHandler have to implement safeHandle, which has all of it's exceptions handled and converted into SelendroidResponses by it's parent.

This means that we don't need all of the repetitive error handling in all of the handlers and they can be written more "naturally"

Example
```
    AndroidElement element = getElementFromCache(request, id);
    if (element == null) {
      return new SelendroidResponse(getSessionId(request), 10, new NoSuchElementException("The element with id '"
          + id + "' was not found."));
    }
    try {
      element.clear();
    } catch (StaleElementReferenceException se) {
      return new SelendroidResponse(getSessionId(request), 10, se);
    } catch (Exception e) {
      SelendroidLogger.error("error while clearing the element: ", e);
      return new SelendroidResponse(getSelendroidDriver(request).getSession().getSessionId(), 13, e);
    }
    return new SelendroidResponse(getSessionId(request), "");
```

Can now be written
```
    getElementFromCache(request, id).clear();
    return new SelendroidResponse(getSessionId(request), "");
```
Submitted on behalf of: Facebook