#68 - 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 
This breaks the current design, as the `#` split is duplicated in compiler and executor. Please rework the implementation so that compiler emits instructions that does not require any further parsing in the executor. E.g emit  an instruction with `sourceFile` set to the path that should be required and add another property (e.g. `accessor`) to store `part[1]`.

```js
var factory = require(data.sourceFile);
if (data.accessor)
  factory = factory.accessor;
```