Create new interfaces for objects transmitted using the REST API

Changes:
- Create new IContact, IAccount, and IConversation interfaces in common/
    - These interfaces represent the serialized versions of the models which are transferred
    - The client models are classes which implement these interfaces
- Create new LookupResult interface for nameserver lookup results
- Create new IConversationMember interface for conversation members
    - The client interface ConversationMember extends this interface to have a Contact field rather than IContact
- Create new ConversationInfos interface for conversation infos
- Create new ContactDetails interface for contact details (used by contacts routes)
- Move request and response body interfaces into common/
- Merge AccountConfig into AccountDetails interface
- Create interfaces for server-only objects:
    - ConversationMemberInfos
    - ConversationRequestMetadata
- Ensure interfaces in jami-signal-interfaces.ts do not contain fields with JamiSwig types
- Rename models/ filenames to camelCase as they are not components
- Rewrite client models to have proper TypeScript accessors and remove unused getters
- Rewrite how client models are initialized from the serialized interface using .fromInterface static methods
- Make client models implement the interfaces in common/ for consistency
- Remove unneeded _next parameter for Express.js route handlers
- Use Partial<T> for all Express.js request body types on server
- Type all Axios response body types with interfaces

GitLab: #92
Change-Id: I4b2c75ac632ec5d9bf12a874a5ba04467c76fa6d
diff --git a/client/src/contexts/WebRtcProvider.tsx b/client/src/contexts/WebRtcProvider.tsx
index 1ce3ff6..b7733bc 100644
--- a/client/src/contexts/WebRtcProvider.tsx
+++ b/client/src/contexts/WebRtcProvider.tsx
@@ -66,17 +66,17 @@
     if (!webRtcConnection && account) {
       const iceServers: RTCIceServer[] = [];
 
-      if (account.getDetails()['TURN.enable'] === 'true') {
+      if (account.details['TURN.enable'] === 'true') {
         iceServers.push({
-          urls: 'turn:' + account.getDetails()['TURN.server'],
-          username: account.getDetails()['TURN.username'],
-          credential: account.getDetails()['TURN.password'],
+          urls: 'turn:' + account.details['TURN.server'],
+          username: account.details['TURN.username'],
+          credential: account.details['TURN.password'],
         });
       }
 
-      if (account.getDetails()['STUN.enable'] === 'true') {
+      if (account.details['STUN.enable'] === 'true') {
         iceServers.push({
-          urls: 'stun:' + account.getDetails()['STUN.server'],
+          urls: 'stun:' + account.details['STUN.server'],
         });
       }
 
@@ -123,7 +123,7 @@
   const [iceCandidateQueue, setIceCandidateQueue] = useState<RTCIceCandidate[]>([]);
 
   // TODO: This logic will have to change to support multiple people in a call
-  const contactUri = useMemo(() => conversation.getFirstMember().contact.getUri(), [conversation]);
+  const contactUri = useMemo(() => conversation.getFirstMember().contact.uri, [conversation]);
 
   const getMediaDevices = useCallback(async (): Promise<MediaDevicesInfo> => {
     try {