/api/* returns a 500 Internal Server Error
### Description

Calling the API returns a 500

### Steps to Reproduce

1. Calls to /api/* endpoints times out and returns a 500

```
# curl -I localhost:4000/api/pools
HTTP/1.1 500 Internal Server Error
Date: Fri, 20 Jul 2018 18:20:21 GMT
Server: Kestrel
Content-Length: 0
```


### Expected behavior

I would expect a 200 response with corresponding data.

### Actual behavior

Returns a 500

### Reproduces how often

100% of the time it's reproducible

### Version

git checkout from current master:

7207861cf09d8c2372a7a641883d0f35592f43d5

I've also tried using the latest docker image with the same results.

This is all on CentOS 7.5

### Additional Information

Since I'm able to reproduce this issue using both master checkout as well as the docker image using the same config, I'm *assuming* this is an issue with my config.  However, I've looked over it several times and have been unable to find what's wrong/missing.  I've also tried remaking the config and end up at the same result.  When I have the logs in debug, I do see a "The operation has timed out" message in the logs when I make a call to the api endpoints.

Below is my config:
```
{
  "logging": {
    "level": "info",
    "enableConsoleLog": false,
    "enableConsoleColors": false,

    // Log file name (full log)
    "logFile": "miningcore.log",

    // Folder to store log file(s)
    "logBaseDirectory": "/var/log/",

    // If enabled, separate log file will be stored for each pool as <pool id>.log
    // in the above specific folder.
    "perPoolLogFile": true
  },

  "banning": {
    // "integrated" or "iptables" (linux only - not yet implemented)
    "manager": "integrated",
    "banOnJunkReceive": true,
    "banOnInvalidShares": false
  },

  "notifications": {
    "enabled": true,
    "email": {
      "host": "smtp.example.com",
      "port": 587,
      "user": "user",
      "password": "password",
      "fromAddress": "info@yourpool.org",
      "fromName": "pool support"
    },

    "admin": {
      "enabled": true,
      "emailAddress": "user@example.com",
      "notifyBlockFound": false
    }
  },

  // Where to persist shares and blocks to
  "persistence": {
    // Persist to postgresql database
    "postgres": {
      "host": "35.185.254.10",
      "port": 5432,
      "user": "someuser",
      "password": "somepassword",
      "database": "mydb"
    }
  },

  // Generate payouts for recorded shares and blocks
  "paymentProcessing": {
    "enabled": true,

    // How often to process payouts, in milliseconds
    "interval": 600,

    // Path to a file used to backup shares under emergency conditions, such as
    // database outage
    "shareRecoveryFile": "recovered-shares.txt"
  },

  // API Settings
  "api": {
    "enabled": true,

    // Binding address (Default: 127.0.0.1)
    "listenAddress": "0.0.0.0",

    // Binding port (Default: 4000)
    "port": 4000
  },

  "pools": [{

    // DON'T change the id after a production pool has begun collecting shares!
  "id": "RVN",
     "enabled": true,
     "coin": {
       "type": "RVN"
     },

    // Address to where block rewards are given (pool wallet)
    "address": "RQNT9JHRyTXsip9jN1uRauExSZoSjJj9yF",

    // Block rewards go to the configured pool wallet address to later be paid out
    // to miners, except for a percentage that can go to, for examples,
    // pool operator(s) as pool fees or or to donations address. Addresses or hashed
    // public keys can be used. Here is an example of rewards going to the main pool
    // "op"
    "rewardRecipients": [
      {
        // Pool wallet
        "address": "RQNT9JHRyTXsip9jN1uRauExSZoSjJj9yF",
        "percentage": 1.0
      }
    ],

    // How often to poll RPC daemons for new blocks, in milliseconds
    "blockRefreshInterval": 400,

    // Some miner apps will consider the pool dead/offline if it doesn't receive
    // anything new jobs for around a minute, so every time we broadcast jobs,
    // set a timeout to rebroadcast in this many seconds unless we find a new job.
    // Set to zero to disable. (Default: 0)
    "jobRebroadcastTimeout": 0,

    // Remove workers that haven't been in contact for this many seconds.
    // Some attackers will create thousands of workers that use up all available
    // socket connections, usually the workers are zombies and don't submit shares
    // after connecting. This features detects those and disconnects them.
    "clientConnectionTimeout": 300,

    // If a worker is submitting a high threshold of invalid shares, we can
    // temporarily ban their IP to reduce system/network load.
    "banning": {
      "enabled": true,

      // How many seconds to ban worker for
      "time": 600,

      // What percent of invalid shares triggers ban
      "invalidPercent": 50,

      // Check invalid percent when this many shares have been submitted
      "checkThreshold": 50
    },

    // Each pool can have as many ports for your miners to connect to as you wish.
    // Each port can be configured to use its own pool difficulty and variable
    // difficulty settings. 'varDiff' is optional and will only be used for the ports
    // you configure it for.
    "ports": {
      // Binding port for your miners to connect to
      "3667": {
        // Binding address (Default: 127.0.0.1)
        "listenAddress": "0.0.0.0",

        // Pool difficulty
        "difficulty": 16,

        // Variable difficulty is a feature that will automatically adjust difficulty
        // for individual miners based on their hash rate in order to lower
        // networking overhead
        "varDiff": {

          // Minimum difficulty
          "minDiff": 0.01,

          // Maximum difficulty. Network difficulty will be used if it is lower than
          // this. Set to null to disable.
          "maxDiff": null,

          // Try to get 1 share per this many seconds
          "targetTime": 15,

          // Check to see if we should retarget every this many seconds
          "retargetTime": 90,

          // Allow time to very this % from target without retargeting
          "variancePercent": 30,

          // Do not alter difficulty by more than this during a single retarget in
          // either direction
          "maxDelta": 500
        }
      }
    },

    // Recommended to have at least two daemon instances running in case one drops
    // out-of-sync or offline. For redundancy, all instances will be polled for
    // block/transaction updates and be used for submitting blocks. Creating a backup
    // daemon involves spawning a daemon using the "-datadir=/backup" argument which
    // creates a new daemon instance with it's own RPC config. For more info on this,
    // visit: https:// en.bitcoin.it/wiki/Data_directory and
    // https:// en.bitcoin.it/wiki/Running_bitcoind
    "daemons": [{
        "host": "127.0.0.1",
        "port": 8666,
        "user": "someuser",
        "password": "somepassword",

        // Enable streaming Block Notifications via ZeroMQ messaging from Bitcoin
        // Family daemons. Using this is highly recommended. The value of this option
        // is a string that should match the value of the -zmqpubhashblock parameter
        // passed to the coin daemon. If you enable this, you should lower
        // 'blockRefreshInterval' to 1000 or 0 to disable polling entirely.
        "zmqBlockNotifySocket": "tcp://127.0.0.1:8667",

        // Enable streaming Block Notifications via WebSocket messaging from Ethereum
        // family Parity daemons. Using this is highly recommended. The value of this
        // option is a string that should  match the value of the --ws-port parameter
        // passed to the parity coin daemon. When using --ws-port, you should also
        // specify --ws-interface all and
        // --jsonrpc-apis "eth,net,web3,personal,parity,parity_pubsub,rpc"
        // If you enable this, you should lower 'blockRefreshInterval' to 1000 or 0
        // to disable polling entirely.
        "portWs": 18545,
      }
    ],

    // Generate payouts for recorded shares
    "paymentProcessing": {
      "enabled": true,

      // Minimum payment in pool-base-currency (ie. Bitcoin, NOT Satoshis)
      "minimumPayment": 0.01,
      "payoutScheme": "PPLNS",
      "payoutSchemeConfig": {
        "factor": 2.0
      }
    }
  }]
}
```

