Bug: 848604 Better abstraction for apps, internal / external

A better abstraction for apps both internal / external. 
Adds some functionality in there to allow external apps to be specified by url, 
as well as allowing internal / external apps to be specified via config file not via a deductive process.