Implement shorthand notation for middleware paths

When the middleware name (path) is in the format {module}/{filename},
loopback-boot resolves the path by trying multiple locations and
using the first one that exists:

 - {module}/{filename} - the path as supplied,
     -> e.g. loopback/rest
 - {module}/middleware/{filename}
    -> e.g. loopback/middleware/rest
 - {module}/server/middleware/{filename}
    -> e.g. loopback/server/middleware/rest

Values in any other format will bypass this resolution algorithm and
they will be used in the original form:

 - a full path in a module: loopback/server/middleware/rest
 - a relative path: ./middleware/custom, ./custom, ../logger
 - an absolute path: /usr/local/lib/node_modules/compression

Close #68

/to @ritch please review
/cc @raymondfeng