fix(parser/eval): fix for '"s" + ("m"|filter) + "e"'

closes #755
feat(AstParser): Made the AST parser private to the scope

closes #648
feat(scope): watch watches expressions (String) only
feat(directives): remove refs to AstParser, watch strings
feat(interpolate): the service now returns an expression only
refactor(ngPluralize): minor tweaks and code style
feat(ngPluralize): support the new interpolation service

This commit also:
- remove the previously registered watch,
- add an expression cache
fix(filters): make filters required and pass it to all evals
fix(interpolate): do not try to optimize by removing empty strings

To make sure a string is always returned
refactor(scope): watch "readOnly" arg renamed to "canChangeModel"

closes #739

This changes is a BC break:
- the "readOnly" parameter has been renamed to "canChangeModel",
- the semantic is inversed

Before:

    // Default to digest (readOnly = false by default)
    scope.watch(exp, fn);
	// Explicit flush
    scope.watch(exp, fn, readOnly: true);

After

    // Default to digest (canChangeModel = true by default)
    scope.watch(exp, fn);
	// Explicit flush
    scope.watch(exp, fn, canChangeModel: false);