feat(http): add jobs.get_status built-in tool for job polling (#319)

SEP-986-compliant built-in tool (validated via `validate_tool_name` at
build time — panics early if the naming regex ever stops accepting the
name) exposing the JobManager lifecycle envelope over `tools/call`.
Returns `job_id`, `parent_job_id`, `tool`, `status`, timestamps,
`progress`, `error`, and — when the job is terminal and
`include_result=true` — the final ToolResult. Marked
`read_only_hint=true` + `idempotent_hint=true` via ToolAnnotations.

Complements the `$/dcc.jobUpdated` SSE channel from #326 for clients
that prefer polling. Always present in `tools/list`, regardless of
loaded skills. Unknown job ids produce a `CallToolResult { isError:
true, content: [...] }` — never a JSON-RPC transport error — naming
the missing id.

`include_logs=true` is accepted for forward compatibility but is
currently a no-op (JobManager does not capture stdout/stderr); a
`tracing::debug!` breadcrumb documents the reality.

Tests:
- `crates/dcc-mcp-http/tests/jobs_get_status.rs` — SEP-986 name check,
  envelope shape, all six JobStatus serde variants.
- `crates/dcc-mcp-http/src/tests.rs` — tools/list visibility, unknown
  id error envelope, missing-param error, running/terminal envelope
  with/without result.
- `tests/test_jobs_get_status.py` — end-to-end: tools/list visibility,
  unknown id, async dispatch -> poll -> completed with result, and
  include_result=false omission.

Closes #319
